Получите полный URI от href свойства ссылки

Я хотел бы иметь подтверждение на некоторой точке.

Моя цель состоит в том, чтобы всегда получать ту же строку (который является 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.

Вопрос: я могу полагаться на это?

24
задан Savageman 14 April 2010 в 16:15
поделиться

3 ответа

ДА, на это можно положиться!

Однажды, когда люди использовали простой javascript (без jQuery), многие спрашивали противоположное тому, о чем вы спрашиваете, они хотели получить реальный URL-адрес, указанный в атрибуте href, а не полный, в таком случае они просто do:

my_a_dom_node.getAttribute('href', 2); //works both IE/FF

Затем появился jQuery, который помог людям не тратить время на поиски такого кода, и jQuery всегда возвращает реальный URL-адрес, указанный в атрибуте href.

Забавно, что теперь кто-то спрашивает, как получить полный URL-адрес, потому что jQuery возвращает адрес, указанный в атрибуте href.

23
ответ дан 28 November 2019 в 23:18
поделиться

Вы можете перекомпоновать полный 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
}
1
ответ дан 28 November 2019 в 23:18
поделиться

Да, на это можно положиться.

Просматривая исходный код 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 самостоятельно определяет поведение браузера и соответствующим образом адаптируется для обеспечения согласованного результата.

10
ответ дан 28 November 2019 в 23:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: