jquery第一个孩子语法

时间:2011-01-30 01:09:48

标签: jquery

这种语法出了什么问题?

var on_a = 0; // declared outside document ready

on_a = $("#sb_results > a:first");

$(on_a + " .sbr_row").addClass('sbr_row_act');

sb_url = $(on_a).attr('href');

以上与此有何不同?

$("#sb_results > a:first .sbr_row").addClass('sbr_row_act');

sb_url = $("#sb_results > a:first").attr('href');

最后一个确实有效,但不是第一个。

2 个答案:

答案 0 :(得分:3)

因为on_a是一个jQuery对象,所以你要连接它的toString表示,最终看起来像这样:

"[object Object] .sbr_row"

你想要的是:

on_a = $("#sb_results > a:first");
on_a.find(".sbr_row").addClass('sbr_row_act');

......与以下内容相同:

$("#sb_results > a:first .sbr_row").addClass('sbr_row_act');

a:first.sbr_row之间选择器中的空格是descendant-selector(docs),与使用find()(docs)方法实际上相同。

答案 1 :(得分:0)

在第一个中,您将jquery 对象分配给 on_a ,然后在字符串连接中使用它。

on_a = $("#sb_results > a:first");
$(on_a + " .sbr_row").addClass('sbr_row_act'); //here on_a is a jquery object not the string "#sb_results > a:first"

如果将其更改为以下版本,则与第二个版本在逻辑上相同:

on_a = $("#sb_results > a:first");
$(".sbr_row", on_a).addClass('sbr_row_act'); // or on_a.find(".sbr_row").addClass('sbr_row_act');