2013-10-02 4 views
3

Что-то выглядит не так с (неэффективное):JQuery упростить выбор для OnClick событие

$($('.feature-s').siblings()).children().children('a[data-target=#deleteModal]').parent().parent().click(); 

Я хочу, чтобы выбрать интервал, где:

/html/body/div/div/div/div[1][class="feature-s"] 
/html/body/div/div/div/div[2]/span/a/i/span <= click 

Но не там, где:

/html/body/div/div/div/div[1][class="something else"] 
/html/body/div/div/div/div[2]/span/a/i/span <= not handled 

Я воссоздал ситуации здесь:

http://jsfiddle.net/brianray/ncu6u/

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

Спасибо!

ответ

2

Самый простой и быстрый (из всех других ответов) является:

$('.feature-s + div a[data-target="#deleteModal"]') 

См jsperf:

enter image description here

0

Я думаю

$('.feature-s').siblings() 

уже возвращает объект JQuery, так что вы не должны обернуть его в $().

В целом кажется хорошо. Надеюсь это поможет.

+0

Я думаю, что его немного времени для одно- лайнер, но он должен быть быстрее, чем все, что я могу придумать ..... –

1

проверить jsFiddle ниже. Вы можете напрямую выбирать элементы, которые появляются непосредственно после использования функций с помощью селектора +.

$('.feature-s + div').find('a[data-target="#deleteModal"]').click(function(){ 
    alert('hey'); 
    return false; 
}); 

Образец ниже работает просто отлично и эффективнее.

http://jsfiddle.net/ncu6u/1/

+0

Верьте или нет, это на самом деле на 6% медленнее! Выглядит лучше, хотя http://jsperf.com/selector-performance-test-mt – mattytommo

+0

Предположительно упомянутый, более эффективный код мудрый, а не производительность. .find() - это боров, когда дело доходит до производительности! – Chris

+0

@mattytommo 6% при запуске, но кто заботится, так как это происходит на заднем плане? – brianray

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