parentNode или previousElementSibling не работает в IE8 - PullRequest
4 голосов
/ 04 марта 2011

У меня есть некоторый javascript, и кажется, что в IE8 не работает ни parentNode, ни previviousElementSibling. Код прекрасно работает в Firefox и IE9. Эта строка не реализуется:

$(submitter.parentNode.parentNode.previousElementSibling).children('#mark_as_broken').show();

код - это что-то вроде

<form><div><input id=mark_as_broken></input></div></form>
<form><div><input id=mark_as_fixed></input></div></form>

, где вход mark_as_fixed является отправителем. Это работает в других браузерах.

какие-нибудь идеи, которые не сработают и почему?

1 Ответ

13 голосов
/ 04 марта 2011

previousElementSibling не поддерживается до IE9.

http://www.quirksmode.org/dom/w3c_core.html#t84

Вот функция, которая должна работать. Еще не проверял. Кажется, работает.

var previousElementSibling = function( el ) {
    if( el.previousElementSibling ) {
        return el.previousElementSibling;
    } else {
        while( el = el.previousSibling ) {
            if( el.nodeType === 1 ) return el;
        }
    }
}

$( previousElementSibling(submitter.parentNode.parentNode) )

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

Вы не упомянули jQuery,но вы, похоже, используете его API.Если это так, вы можете просто сделать это:

$(submitter).closest('form').prev().find('#mark_as_broken').show();

Исходя из вашей разметки, кажется, что вы должны использовать .find() вместо .children().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...