Самый быстрый способ получить доступ к классу после $(это)
Имея следующую структуру HTML:
<tr class="invisible">
<td align="center">
<a class="i_edit" data-target="30"></a>
</td>
<td class="category">
<span class="f_type" style="background-image: url(/admin/assets/img/f_type_3.gif);"> Tests </span>
</td>
<td style="background-color: blue;">
<select class="behaviour" name="behaviour" style="opacity: 1;">
<option selected="" value="1" style="opacity: 1;">Por noticias destacadas</option>
<option value="2" style="opacity: 1;">Por fecha</option>
</select>
</td>
</tr>
Какой самый лучший / самый быстрый способ получить доступ к классу .i_edit
внутри:
$('.behaviour').change(function(){
$(this).closest('.i_edit').css('background-color', 'red'); //doesn't work
$(this).parent().closest('.i_edit').css('background-color', 'red'); //doesn't work
$(this).parent().parent().find('.i_edit').css('background-color', 'red'); //this works
return false;
});
2 ответа
Решение
Ни один из трех.
использование $(this).closest('tr').find('.i_edit')
потому что он читается и все еще работает, когда структура вашего DOM меняется.
Смотрите также: http://api.jquery.com/closest/.
Сначала выполните.parents('tr.invisible), затем выполните.find('.i_edit')
$('.behaviour').change(function(){
var obj_this = $(this)
obj_this.parents('tr.invisible').find('.i_edit').css('background-color', 'red');
return false;
});
также сохраните $(this) в переменной, если вам когда-либо понадобится использовать его более одного раза.
var obj_this = $(this)