2011-01-30 46 views
1

這個語法有什麼問題?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'); 

最後一個工作,但不是第一個工作。

回答

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_rowdescendant-selector(docs),其實際上與使用find()(docs)方法相同。

+0

非常感謝你:) – Alexander 2011-01-30 01:48:46

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');