Я хотел бы иметь подтверждение на некоторой точке.
Моя цель состоит в том, чтобы всегда получать ту же строку (который является URI в моем случае) при чтении href свойства из ссылки. Пример:
с base_url = http://domain.name/
с base_url = http://domain.name/domain/
с base_url = любая папка из http://domain.name/
Я должен добраться http://domain.name/test.htm
от этих 3 ситуаций выше (или любая другая идентичная строка).
После некоторых тестов это появляется это my_a_dom_node.href
всегда возвращайте полно квалифицированный URI, включая http://domaine.name, который должен быть хорошо, для какого я хочу.
jQuery имеет другое поведение и $(my_a_dom_node).attr('href')
возвращает содержание (текст), который появляется в HTML. Таким образом, мой прием должен использовать $(my_a_dom_node).get(0).href
получить полный URI.
Вопрос: я могу полагаться на это?
ДА, на это можно положиться!
Однажды, когда люди использовали простой javascript (без jQuery), многие спрашивали противоположное тому, о чем вы спрашиваете, они хотели получить реальный URL-адрес, указанный в атрибуте href, а не полный, в таком случае они просто do:
my_a_dom_node.getAttribute('href', 2); //works both IE/FF
Затем появился jQuery, который помог людям не тратить время на поиски такого кода, и jQuery всегда возвращает реальный URL-адрес, указанный в атрибуте href.
Забавно, что теперь кто-то спрашивает, как получить полный URL-адрес, потому что jQuery возвращает адрес, указанный в атрибуте href.
Вы можете перекомпоновать полный URL-адрес, используя немного JavaScript:
function parseLink(link) {
var baseUrl = location.href.substring(0,location.href.lastIndexOf('/'));
if (link.indexOf('/') != -1) {
link = link.substring(link.lastIndexOf('/'));
} else {
link = "/"+ link;
}
var fullUrl = baseUrl + link;
return fullUrl
}
Да, на это можно положиться.
Просматривая исходный код jQuery (1.4.2), я вижу, что используется функция jQuery.attr ()
(сокращенная до соответствующих частей):
jQuery.extend({
// ...
attr: function( elem, name, value, pass ) {
// ...
var attr = !jQuery.support.hrefNormalized && notxml && special ?
// Some attributes require a special call on IE
elem.getAttribute( name, 2 ) :
elem.getAttribute( name );
// Non-existent attributes return null, we normalize to undefined
return attr === null ? undefined : attr;
}
});
Таким образом, она эффективно вызывает elem.getAttribute ('href')
, который возвращает фактическое значение атрибута, а свойство href
по умолчанию возвращает канонический URL.
Однако есть ссылка на jQuery.support.hrefNormalized
, из которых сайт поддержки jQuery должен сказать:
hrefNormalized
: равно true, если. getAttribute ()
метод извлекает атрибутhref
элементов без изменений, а не нормализует его до полного URL. (Сейчас неверно в IE, URL-адреса нормализованы). Спецификация DOM l3
Это в основном означает, что jQuery самостоятельно определяет поведение браузера и соответствующим образом адаптируется для обеспечения согласованного результата.