Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Навигация в DOM (https://javascript.ru/forum/events/31166-navigaciya-v-dom.html)

Dazar 28.08.2012 23:27

Навигация в DOM
 
Скажите пожалуйста, как через DOM перейти к предыдущей строчке в таблице? alert(клетка.parentNode.previousSibling.tagN ame) не работает, хотя alert(клетка.parentNode.tagName) выводит положенное TR

Dazar 28.08.2012 23:37

Всё, я разобрался, между строчками таблицы есть текстовое поле, рабочий вариант клетка.parentNode.previousSiblin g.previousSibling.tagName

cyber 29.08.2012 00:14

c previousSibling могут быть проблемы из за текстовых узлов пример ниже
<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>
    <table><tr>
      <td>1</td>  
      <td>2</td>
      <td>3</td>
      
      </tr></table>
    
    
    <script>

var table = document.body.children[0];
      alert(table.rows[0].cells[0].innerHTML )// можно использовать cells && rows
     console.log(table.rows[0].cells[0].nextSibling)// текстовый узел
       console.log(table.rows[0].cells[0].nextSibling.nextSibling)// следущий td
         console.log(table.rows[0].cells[0].nextElementSibling)// следущий td (поддержка ие9+) 
    </script>

  </body>
</html>

devote 29.08.2012 06:48

Цитата:

Сообщение от cyber
следущий td (поддержка ие9+)

в ИЕ8 легко добавить:
Object.defineProperty( Element.prototype, "nextElementSibling", {
    get: function() {
        return this.nextSibling ?
            this.nextSibling.nodeType === 1 ? this.nextSibling :
            this.nextSibling.nextSibling : null;
    }
});

и previousElementSibling:
Object.defineProperty( Element.prototype, "previousElementSibling", {
    get: function() {
        return this.previousSibling ?
            this.previousSibling.nodeType === 1 ? this.previousSibling :
            this.previousSibling.previousSibling : null;
    }
});
А вот с ИЕ7 и ниже, уже проблемнее... там надо через HTC добавлять

cyber 29.08.2012 10:54

Цитата:

Сообщение от devote (Сообщение 201308)
в ИЕ8 легко добавить:
Object.defineProperty( Element.prototype, "nextElementSibling", {
    get: function() {
        return this.nextSibling ?
            this.nextSibling.nodeType === 1 ? this.nextSibling :
            this.nextSibling.nextSibling : null;
    }
});

и previousElementSibling:
Object.defineProperty( Element.prototype, "previousElementSibling", {
    get: function() {
        return this.previousSibling ?
            this.previousSibling.nodeType === 1 ? this.previousSibling :
            this.previousSibling.previousSibling : null;
    }
});
А вот с ИЕ7 и ниже, уже проблемнее... там надо через HTC добавлять

да мне в лом было, у меня час ночи был , я перед сном написал=)


Часовой пояс GMT +3, время: 19:18.