2013-04-30 4 views
1

Как выбрать все элементы с помощью текущего селектора? Может показаться немного ленивым, но я хочу знать, возможно ли это - и не использовать имя класса.

$(document).on('click', '.selector', function() { 
    // Select all nodes based on this selector 

    $($(this).context) // Tried this but didn't work. I want to use $(this) to get the original selector (.selector), but not use $(this).className 
}); 

Таким образом, вместо написания:

$('.selector').removeClass('selected'); 
$(this).addClass('selected'); 

Я хочу:

$($(this).getSelector()).removeClass('selected');  // Remove class from all nodes with this selector 
$(this).addClass('selected');   // Only add class to the item currently clicked 

Это не повторять селектор.

+0

, когда вы на самом деле использовать '$ (это)', то он будет относиться к самому полному элементу. что именно вы хотите сделать? – dreamweiver

+2

Что значит все предметы? Ваш селектор фактически является именем класса, поэтому вам нужно будет получить элементы по имени класса. – Oktav

+0

Я хочу общее решение. Это может быть тег или идентификатор ... – silkfire

ответ

3

Теперь я понимаю ваш вопрос. Вы должны использовать этот код:

SEE DEMO

$(document).on('click', '.selector', function (e) { 
    $('*').css('color','black'); 
    var $elems = $(e.handleObj.selector);//this is what you want! 
    $elems.css('color','red'); 
}); 
$(document).on('click', 'div', function (e) { 
    $('*').css('color','black'); 
    var $elems = $(e.handleObj.selector); 
    $elems.css('color','red'); 
}); 
+1

свойство selector устарело в 1.7 и удалено полностью в 1.9 – jbabey

+1

@jbabey Ya селекторное свойство объекта jquery, а не свойство выбора события handleObj, см. работы по jq2.0: http://jsfiddle.net/k4TTB –

+0

@roasted Вы правы. Я могу подтвердить, что он работает. – Oktav

3

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

$(document).on('click', '.selector', function() { 
    var elems = $('.selector'); 
}); 
1
var selector = '.selector', 
    $elems = $(selector); 

$(document).on('click', selector, function() { 
    // Get individual 
    var $this = $(this); 

    // Still can cccess all $elems 
}); 
+6

, это приведет к тому, что будет только элемент, который был нажат, а не все элементы, соответствующие селектору – jbabey

+2

, но это изменяет поведение обработки событий с помощью делегированного непосредственно связанный с товарами – jbabey

4

У вас есть селектор трудно закодированный, поэтому просто использовать его снова.

var selector = '.selector'; 
$(document).on('click', selector, function() { 
    // Select all nodes based on this selector 

    var matches = $(selector); 
}); 

Обратите внимание, что есть selector property на объекты JQuery, но осуждался в 1,7 и удалены в версии 1.9, так что я не рекомендую использовать его, даже если вы в состоянии.

+0

Хороший ответ, спасибо. Я знал о 'selector', но он не работает с' .on() 'к сожалению. Итак, вы можете использовать 'context', но он выбирает только элемент ... – silkfire

+1

У вас есть event.handleObj.selector, это то, что ищет ОП. –

+0

@roasted 'handleObj' и' selector' недокументированы и устарели, соответственно, используют на свой страх и риск :) – jbabey

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