обновление прототипа () не работает в IE - PullRequest
1 голос
/ 06 января 2010

, как следует из названия, у меня есть проблема с функцией обновления прототипа во всех версиях IE, но она работает в FF и chrome

это не работает

var element = $('mainnav_h');
element.cleanWhitespace();
var html = element.firstChild.innerHTML;
html = html.gsub('<span class="sep"></span>', '');
element.firstChild.update(html);//this doesn't word

но это работает

var element = $('mainnav_h');
element.cleanWhitespace();
var html = element.firstChild.innerHTML;
html = html.gsub('<span class="sep"></span>', '');
element.firstChild.update("this works");

источник

<div class="innerNavigation_horizontal clear">
    <ul id="mainnav_h">
        <li><span class="sep"></span><a href="#" title="#">items</a></li>
    </ul></div>

вы можете ясно видеть, когда я передаю переменную в update (), функция не работает в IE, тогда как когда я передаю ей строку, она работает в IE, может кто-нибудь объяснить это абсурдное поведение IE

САЛМАН

Ответы [ 2 ]

0 голосов
/ 29 мая 2012

В этом случае проблема, очевидно, была связана с использованием синтаксиса / синтаксиса HTML, но для других пользователей Google, которые приезжают сюда, я могу рекомендовать отключить режим совместимости IE. Я мог бы легко воссоздать проблему в IE-консоли (F12), выполнив:

Стандарты режима IE7 для документов:

>> span = document.createElement("span");
[object] {
    nextSibling : ,
    onresizeend : null,
    onrowenter : null,
    aria-haspopup : "",
    childNodes : [object],
    ondragleave : null,
    oncut : null,
    clientHeight : 0,
    onbeforepaste : null,
    ondragover : null
    ...
} 
>> span.update() 
"Object doesn't support property or method 'update'"

Стандарты режима документа IE9:

>> span = document.createElement("span"); 
[object] {
    nextSibling : ,
    onresizeend : null,
    onrowenter : null,
    aria-haspopup : "",
    childNodes : [object],
    ondragleave : null,
    oncut : null,
    clientHeight : 0,
    onbeforepaste : null,
    ondragover : null
    ...
} 
>> span.update()
[object] {
    nextSibling : ,
    onresizeend : null,
    onrowenter : null,
    aria-haspopup : "",
    childNodes : [object],
    ondragleave : null,
    oncut : null,
    clientHeight : 0,
    onbeforepaste : null,
    ondragover : null
    ...
}

Это, конечно, будет работать только при запуске консоли на сайте, на котором загружен прототип фреймворка, например www.redmine.org.

0 голосов
/ 06 января 2010

Я предполагаю, что проблема не в update(), а в одной из предыдущих функций, работающих с HTML.

Можете ли вы сделать тестовый вывод html, используя alert() на каждом этапе сценария? Это содержит что-нибудь в первую очередь?

Как выглядит #mainnav_h? Можете ли вы опубликовать источник?

Действительно ли element.firstChild существует? Можете ли вы проверить, используя

alert(typeof element.firstChild);

Получаете ли вы какие-либо сообщения об ошибках в IE?

...