2013-09-29 2 views
0

Я новичок в jQuery, извиняюсь, если мой словарный запас неверен, пожалуйста, исправьте меня, чтобы я мог научиться правильному пути.Добавить селектор в объект, уже сохраненный в переменной

Я пытаюсь использовать лучшие практики для оптимизации производительности. Мне сказали хранить статические объекты в переменной, когда это возможно. Я пытаюсь сохранить родительский объект #mytable, а затем перейти вниз к дочерним объектам.

var count=1; 
$('#eachselector').each(function(){ 

    var MyTable = $('#mytable'+count); 
    $(MyTable+' td[condition=true][condition2=true]').attr('do', 'stuff'); 
    $(MyTable+' table[condition=true][condition2=true]').attr('do', 'stuff'); 

    count++; 
}); 

Это дает мне ошибку "перехватывается исключение: синтаксическая ошибка, непризнанное выражение: [объект Object]".

Я подозреваю, что я рассматриваю MyTable как строку при вызове внутри каждого(), но не уверен, как должен выглядеть синтаксис.

Спасибо!

+0

Вы CONCATENATE строку в объект JQuery (MYTABLE). –

ответ

3

Используйте вместо этого:

var MyTable = $('#mytable'+count); 
MyTable.find('td[condition=true][condition2=true]').attr('do', 'stuff'); 
MyTable.find('table[condition=true][condition2=true]').attr('do', 'stuff'); 

Это использует .find() функцию JQuery для поиска потомков $('#mytable'+count). Причина, по которой ваш код не работает, заключается в том, что MyTable является объектом jQuery, а не строкой.

Вы также можете использовать $('selector', MyTable), но внутренне он просто соответствует функции .find().

+0

Это замечательный Джо, проверенный и отлично работает. Однако, ради изучения, невозможно ли связать дополнительные селекторы непосредственно с переменной, как я пытался это сделать? Я предполагаю, что это потому, что я рассматривал его как строку, а не объект. Это верно? – Joe

+0

@Joe - проблем нет. Это невозможно, так как «myTable» - это объект, но вы пытаетесь его конкатенировать, как будто это была строка. Например, это сработало бы: '$ ('# mytable' + count + 'td [condition = true] [condition2 = true]')', поскольку вы просто конкатенируете строки. Однако этот способ делает это более беспорядочным и менее оптимизированным. Чтобы более подробно посмотреть на «MyTable», используйте «console.log (MyTable)», после того как вы определите его, используйте инструменты разработчика вашего браузера для его просмотра. – Joe

+0

Отлично. Фактически, '$ ('# mytable' + count + 'td [condition = true] [condition2 = true]')' был моим первоначальным проектом этого кода, тогда я хотел вернуться и реализовать лучший способ. Большое спасибо Джо очень полезно! – Joe

0

Используйте следующий код:

$('td[condition=true][condition2=true]', MyTable).attr('do', 'stuff'); 

Это говорит набор «делать» атрибут всех тд с Condition1 и condition2 как истинный к значению «вещи»

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