这种语法出了什么问题?
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');
最后一个确实有效,但不是第一个。
答案 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');