HTML / Javascript: выбор дяди / тети - PullRequest
0 голосов
/ 30 мая 2010

Итак, у меня есть код,

<div class="chunk" id="">
    <div class="chunkContent">
        <div class="textLeft" ></div>
        <div class="textRight" ></div>
        <div class="notes border">Notes...</div>
    </div>
    <div class="tools fl">
        <div class="toggleNotes border">n</div>
        <div class="addChunk border">+</div>
    </div>
</div>

Теперь два div, вложенных в div.tools, представляют собой маленькие кнопки. div.toggleNotes Мне нужно выбрать div.notes в функции javascript / jquery. div.addChunk Мне нужно выбрать первый div, div.chunk. В настоящее время я делаю это:

$(".addChunk").live('click', (function(){create_chunk(this.parentNode.parentNode)}))
$(".toggleNotes").live('click',function(){toggle_notes(this.parentNode.parentNode.firstElementChild.lastElementChild)})

Есть ли лучший (то есть, более правильный) способ сделать это, чем объединить parentNotes и firstElementChild и т. Д. Я в основном смотрю на вкладку DOM в Firebug.

Ответы [ 3 ]

3 голосов
/ 30 мая 2010

Поскольку вы отметили свой вопрос с помощью jQuery, я предполагаю, что вы открыты для использования его методов обхода. Это обеспечит кросс-браузерную поддержку.

Если это так, вы можете сделать это:

&(".addChunk").live('click', function(){
   create_chunk($(this).closest('.chunk')); // Get closest ancestor with class 'chunk'
});

$(".toggleNotes").live('click',function(){
   toggle_notes($(this).parent().prev().find('.notes'));  // Get parent element, traverse
});                                                       //  to its previous sibling,
                                                          //  and find element with 'notes'

EDIT:

В качестве альтернативы, если вы хотите, вы можете использовать .closest() для toggle_notes.

$(".toggleNotes").live('click',function(){
   toggle_notes($(this).closest('.chunk').find('.notes'));
});  

Соответствующие документы jQuery:

1 голос
/ 30 мая 2010

Вы можете использовать селектор jQuery .closest () для этого, но кажется, что вы можете использовать классы или идентификаторы для выполнения этого менее сложным способом.

1 голос
/ 30 мая 2010

А как же:

$("div:.addChunk").live('click', function() {
    create_chunk($(this).parent().parent());
});

$("div:.toggleNotes").live('click',function() {
    toggle_notes($(this).parent().siblings('div:.chunkContent').find('div:.notes'));
});​
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...