Не удается получить доступ к элементу заголовка документа с помощью jQuery (IE 8) - PullRequest
7 голосов
/ 26 октября 2011

Я вижу эту проблему в Internet Explorer 8, но не в Safari или Firefox. До сих пор я не тестировал в других версиях IE.

Я разрабатываю свой собственный плагин jQuery, и для этого вопроса я сократил его до двух соответствующих строк.


В IE 8, используя код ниже, $('title').text() ничего не делает. docTitle пусто, потому что title пусто, как будто селектор jQuery для <title>, $('title') не работает. (Опять же, AFAIK, это только в IE 8)

(function ($) {
    $.fn.myPlugin = function (options) {

        var title = $('title').text(),
            docTitle = escape(title);

    };
})(jQuery);

http://jsfiddle.net/sparky672/YMBQ2/


Однако, используя приведенный ниже код JavaScript, document.title отлично работает во всем, включая IE 8 ...

(function ($) {
    $.fn.myPlugin = function (options) {

        var docTitle = escape(document.title);

    };
})(jQuery);

EDIT:

Неважно, что этот код находится внутри плагина.

Тот же результат в IE 8 с этим ...

$(document).ready(function () {    
    var title = $('title').text();
    alert(title);
});

Просто чтобы уточнить, я не настаиваю на этом. На самом деле я исправил свой плагин, просто взамен использовав document.title. Если изначально не было ясно, я просто спрашиваю, почему это не работает в IE 8.


Кто-нибудь может объяснить , почему , или какую глупую ошибку я здесь допустил?


РЕДАКТИРОВАТЬ 2:

Вот некоторые сообщения об ошибках jQuery по этому вопросу

http://bugs.jquery.com/ticket/7025

http://bugs.jquery.com/ticket/5881

http://bugs.jquery.com/ticket/2755

И десятки других сообщили об одном и том же. Официальный ответ заключается в том, что "document.title является единственным надежным кросс-браузерным способом и должен использоваться вместо" , и Билет закрыт. Итак, поехали.

Ответы [ 2 ]

7 голосов
/ 26 октября 2011

Я предполагаю, что jQuery перебирает все TextNodes и объединяет его nodeValue. IE хранит это значение не так, как другие браузеры.

var title = document.getElementsByTagName('title')[ 0 ];
title.firstChild // This would be the Text-Object with the characterdata of the title
                 // Firefox: [object Text]
                 // IE: null

Это должно быть причиной того, что вы не можете получить textContent с jQuery.text(). title.text похоже на кросс-браузерную комп. Я тестировал его только в IE 7 и Firefox 3.6, но вы можете проверить другой браузер , если хотите. Но почему бы не использовать document.title?

0 голосов
/ 26 октября 2011

попробуйте использовать $('title').html(), который должен работать во всех браузерах

...