jQuery选择器和遍历问题

时间:2011-06-15 22:49:34

标签: jquery

使用jQuery和下面的HTML,有人可以建议从 $(“输入”)中检索 span.street_address_display 的最佳(即最有效)方式 。感谢。

<tr>
<th class="address_name" scope="row">Work</th>
<td class="address_entry">
  <span class="street_address_display">123456 ABC Street</span> 
  <span class="city_display">Vancouver</span>,  
  <span class="state_province_display">British Columbia</span>  
  <span class="country_display">Canada</span>   
  <span class="post_code_display">V1A2B3</span> 
</td>
<td class="address_select"><input value="address_2" name="address_select" type="radio" /></td>
</tr>

5 个答案:

答案 0 :(得分:3)

var $input = $('input');
var street_address_display = $input.closest('td').prev().find('span.street_address_display');

或者,如果表格行中没有其他此类跨度,

var street_address_display = $input.closest('tr').find('span.street_address_display');

答案 1 :(得分:3)

如果你在一个函数中调用它,this的范围是输入(否则你需要用抓取输入的东西替换this),比如

$(this).parent().prev().children('span.street_address_display')

应该带你到跨度。就效率而言,我会说你会注意到最大的差异就是IE,或者不能用标签或类抓取的地方。

请注意,这是在进行直接查找,因此在.parent()进行一级升级,而不是直到找到td,之前为td,然后才会直接查找td span street_address_display并且具有班级{{1}}。这不会刮得太深,所以你会失去灵活性,但更少的查找转化为更快。如果值得的话,这取决于你。

答案 2 :(得分:2)

您也可以这样做:

$(".street_address_display",$("input").parents("tr"));

请注意,它只会给你一个结果,所以如果你有多个输入,你需要定义你所追求的那个,除非你可以使用this

例如:

$(".street_address_display",$("input:first").parents("tr"))

$(".street_address_display",$(this).parents("tr"))

答案 3 :(得分:1)

我不太确定你是否想要获得输入的值,类“street_address_display”的值,但这分别适用于每个:

 $('.street_address_display').html();


 $('input').val();

答案 4 :(得分:1)

这有效:

var $my_span = $('input[name="address_select"]').parent().prev().children().first()