JQuery найти "селектор" - PullRequest
2 голосов
/ 19 июля 2010

следующий мой код

HTML :

<div id = "content" >
  <div class = "child" >Hello !! </div>
</div>

Javascript :

$(function() {
  $('#content .child').click(function() {
          //print the selected jQuery parameters
  });
});

Мне нужнозахватить параметры, которые я передаю функции jQuery в приведенном выше коде, я хочу напечатать вывод как #content .child.

Спасибо !!

Ответы [ 3 ]

3 голосов
/ 19 июля 2010

Помимо ответа Коби, это обычно невозможно. Это все равно, что спросить «с учетом следующего цикла, как вернуть исходный массив обратно?»

var array = [1, 2, 3, 4, 5];
for (i = 0; i < array.length; i++) {
    var a = array[i];
    alert( /* how do I get the original array given only 'a'? */ );
}

Понятно, что в этом случае вы не можете вернуть исходный массив, учитывая только a. Но что может быть неясным, так это то же самое и в вашем случае.

Это потому, что вызов .click() по сути превращается в вызов .each(), и это в основном просто цикл for вокруг каждого из соответствующих элементов. Когда вы смотрите на один элемент в этой коллекции, невозможно вернуть исходную коллекцию обратно.

3 голосов
/ 19 июля 2010

Напишите свои собственные оболочки для событий click, focus, .., которые предоставляют эту функциональность.Написание такой обертки довольно тривиально.Вот один из способов:

jQuery.fn.addClick = function(fn) {
    var selector = this.selector; // capture the selector here
    this.click(function(event) { // write a wrapper for the click handler
        fn(event, selector); // call the user's handler and pass it the selector
    });
};

Ваша функция обработчика событий теперь получает два параметра вместо одного.Первый - это событие, а второй - селектор, который использовался для привязки этого события.

$("#content .child").addClick(function(e, selector) {
    alert(selector); // "#content .child"
});

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

См. пример .

3 голосов
/ 19 июля 2010

Обычно вы используете selector, но в этом контексте this не имеет селектора. Вы можете использовать:

var div = $('#content .child');
div.click(function() {
    alert(div.selector);
});

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

var selector = '#content .child';
$(selector).click(function() {
    alert(selector);
});

Рабочий пример: http://jsfiddle.net/cmuTv/

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