Вы можете использовать свойство selector
.См. Предостережения в документах, а также заметки о том, как объединить его с context
.Одним из таких предостережений (хотя, на мой взгляд, это не сразу видно из документации) является то, что когда вы начинаете изменять выделение с помощью вызовов методов, свойство selector
становится менее полезным.Например:
var $add = $("div").not(".bar");
display("$add.length = " + $add.length);
// displays 3 in my example, because I have three divs that don't have class "bar"
display("$add.selector = " + $add.selector);
// displays "div.not(.bar)" (note the '.' rather than ':')
$add = $($add.selector);
display("$add.length = " + $add.length);
// displays 0 in my exmaple, because "not" is taken for a class name
Живая копия
На мой взгляд, это не очень полезно.
Это отвечает на вопрос, который вы на самом деле задавали, но, возможно, есть лучший способ решить основную проблему проектирования.: -)
Обновление : Возможно, проблема в том, что при использовании selector
на $add
возвращается «кнопка».(Я не пробовал, это кажется вероятным.)
Я бы решил это так:
Вариант A :
Если , у вас есть только одна кнопка с классом «добавить», то:
$add = $(document.createElement('button')).addClass('add').appendTo('body');
$subtract = $(document.createElement('button')).addClass('subtract').appendTo('body');
$('body')
.delegate("button.add", "click", handleAdd)
.delegate("button.subtract", "click", handleSubtract);
Опция B :
Если есть другие кнопкис этими классами дайте этим кнопкам некоторую идентифицирующую характеристику - их собственный класс, или id
, или name
, затем используйте это в селекторах delegate
.Пример (но при необходимости измените):
$add = $("<button id='btnAdd' class='add'>").appendTo('body');
$subtract = $("<button id='btnSubtract' class='subtract'>").appendTo('body');
$('body')
.delegate("#btnAdd", "click", handleAdd)
.delegate("#btnSubtract", "click", handleSubtract);
Обратите внимание, что я переключился на нотацию HTML для создания кнопок, так как это более сжато, когда вы получаете несколько атрибутов и тому подобное.
Сторонапримечание: если есть более точный контейнер, на который не влияет обновление ajax, которое вы можете использовать, я бы это сделал.Использование body
в качестве контейнера довольно глобально.Вы сказали, что форма заменяется на ajax, поэтому любой контейнер, который вы обновляете в вашем ajax, вероятно, будет хорошим выбором.