Как получить имя предыдущего брата или сестры

Мне нужно получить имя предыдущего брата. для простоты у меня есть пример кода

<html>

 <head>
   <script type="text/javascript">
     function myFunction()
     {
      var itm=document.getElementById("item2");  
      alert(itm.previousSibling.name);
     }
   </script>
 </head>

 <body>
  <p name='pn'>paragraph</p>
  <button id='item2' onclick="myFunction()">Try it</button>
 </body>
</html>

Редактировать:

<table id="sort">
    <tr name="nodrag nodrop">
        <td colspan=3><strong><a style="cursor:pointer;" class="toggle">Group 1</a></strong>  </td>
        <td style="text-align: right;"><a class="button3" href="#" ><span> Edit </span></a> <a class="button3" href="#" ><span> Delete </span></a></td>
    </tr>
    <tr id="1" class="tr_group"'>
        <td style="width:10px;" class="dragHandle">&nbsp;</td>
        <td><a href=# style="margin-left: 20px;">Umair Iqbal</a></td>
        <td><span style="font-size: 12px; color: #999; line-height: 100%;">A Student at TUM</span></td>
        <td style="text-align: right;"><a class="button3" href="#" ><span> Edit </span></a> <a class="button3" href="#" ><span> Delete </span></a></td>
    </tr>

Ist строка является предыдущим братом второй строки. Я хочу имя 1-й строки, и все мои идентификаторы будут динамическими

Благодарность


person Zoha Ali Khan    schedule 07.06.2012    source источник


Ответы (2)


Используя jQuery, это будет:

$('#item2').prev().attr("name")​​​​​​​​​​;​

С обычным javascript вам нужно будет использовать следующую функцию (чтобы гарантировать игнорирование узлов пробелов)

getPreviousSiblingName(document.getElementById("item2"))

function getpreviousSiblingName(element) {
    var p = element;
    do p = p.previousSibling;
    while (p && p.nodeType != 1);
    return p.attributes["name"].value;
}
person Jason Kulatunga    schedule 07.06.2012
comment
какой элемент вы передаете функции javascript? - person Zoha Ali Khan; 07.06.2012
comment
Позвольте мне изменить мой код на реальную ситуацию, надеюсь, вы поможете мне. - person Zoha Ali Khan; 07.06.2012
comment
Эй, я обновил код вызовом getpreviousSiblingName(document.getElementById(item2)) - person Jason Kulatunga; 07.06.2012
comment
var prevSib = getpreviousSiblingName(document.getElementById(1)) ​console.log(prevSib)​ - person Jason Kulatunga; 07.06.2012
comment
Я использую плагин TableDnD и хочу получить имя предыдущего брата или сестры в функции перетаскивания. Могу я показать вам свой javascript? - person Zoha Ali Khan; 07.06.2012
comment
Спасибо большое. Я сделал это с помощью той функции, которую вы предоставили. Я провожу почти три дня, пробуя разные решения. Миллионы благодарностей. :) - person Zoha Ali Khan; 07.06.2012

Это потому, что, скорее всего, ваш previousSibling будет текстовым узлом, а не узлом элемента. Вам нужен previousElementSibling (где поддерживается) или цикл, который будет получать previousElement до nodeType будет 1 (Node.ELEMENT_NODE).

Кроме того, name не применяется к элементу p (см. https://developer.mozilla.org/en/DOM/Element.name), было бы лучше, если бы вы использовали настраиваемый атрибут (например, атрибут HTML5 data-*, в вашем случае data-name возможно) и, следовательно, использовали набор данных, чтобы получить значение атрибута, или общий getAttribute.

Конечно, такая библиотека, как jQuery, может помочь абстрагироваться от всего этого, объяснение связано только с ванильным JavaScript.

person ZER0    schedule 07.06.2012