2013-11-10 3 views
0

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

JQuery:

$(".item").on("click","a",function() { 
    var link = $(this); // a tag 
    var itemDiv = // what? 
}); 

HTML:

<div class="item"> 
    <a href="#">Link</a> 
    <a href="#">Link</a> 
    <a href="#">Link</a> 
    <a href="#">Link</a> 
</div> 
+0

$ (это) .parent ('DIV') –

+0

Это просто его родитель. –

+0

.parent будет означать, что запрос будет * искать * его и неэффективно.Он хранит его в соответствии с ответом Кристофера. Пример выше - это просто. Его можно было бы легко вставить несколько раз, где .parent не было бы возможно. – CodingIntrigue

ответ

3

... есть способ, чтобы получить элемент, на котором был назван .он как также элемент, на котором было вызвано событие?

Если вы хотите узнать, к какому элементу присоединилось событие, вы можете использовать event.delegateTarget.

Вы можете использовать его, похожее на это:

$(".item").on("click", "a", function (event) { 
    var link = $(this); // a tag 
    var itemDiv = event.delegateTarget; 
    console.log(itemDiv); 
}); 

DEMO - Использование event.delegateTarget


Я не совсем уверен, что понимаю вторую часть вопроса, но если вы хотите узнать точный элемент, инициировавший событие, вы можете использовать event.target.

Я не уверен, что это то, что вы имели в виду, но на всякий случай я добавил пример ниже.

Вы можете использовать это примерно так:

$(".item").on("click", "a", function (event) { 
    var link = $(this); // a tag 
    var initiatedBy = event.target; 
    console.log(initiatedBy); 
}); 

Это очень удобно, если у вас есть, скажем, span внутри вашей ссылки или аналогичной, и нужно, чтобы проверить точный элемент щелкнул.

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


DEMO - Осматривая элемент, который инициировал событие (вторая ссылка содержит span, увидеть разницу в журнале консоли)


0

Попробуйте это:

$(".item").on("click","a",function() { 
    var link = $(this); //the element on which the event was called 
    var itemDiv = $(this).closest(".item"); //the element on which on was called 
}); 
+0

Код является лишь примером. .item может быть вложен в несколько уровней. Я не хочу его находить, если у jquery уже есть ссылка на него. – CodingIntrigue

+0

@RGraham У меня есть обновленный ответ. – Hiral

Смежные вопросы