2012-07-01 93 views
0

我有以下幾點:如何查找元素中是否有h1元素?

$('#content') 

我想是檢查,如果這有它內部的h1元素。如果它有,然後我想要做到以下幾點:

$('#content').buildTableOfContent(); 

有沒有辦法,我可以做這個檢查使用jQuery?

+0

@loler:不,它不會。它會返回一個jQuery對象,它可能包含或不包含任何匹配的元素。所以'if($('#content')。find('h1'))'是**總是** truthy(將永遠進入'if塊)。 –

+1

@loler:*(哦,因爲大聲哭泣...)*不,它不會:http://jsbin.com/ememaz像Prototype這樣的庫會(或者說DOM),因爲Prototype和當你要求一件東西時,DOM返回'null',並且他們找不到它。但jQuery是基於集合的,'find'總是返回一個對象,它可能有零個匹配。 –

+1

@loler:不用擔心!我們應該清理這些評論。我會在幾個小時後再回來查看,如果你的消失了,我也會將其刪除。 :-)最好, –

回答

3

類似的東西應該工作:

if ($("#content h1").length > 0) { 
    $("#content").buildTableOfContent(); 
} 
+0

@ Gemma:或者如果你已經有'c = $(「#content」);'出於某種原因,'c.find(「h1」)。length> 0'。而不是'.length> 0',你可以做'[0]',例如:'if($(「#content h1」)[0]){/ *是的就是它* /}' –

+0

$('#content h1')'將返回所有子h1,孫h1等等。 '$('#content')。children('h1')'將僅限於'#content'的直接後代。 –

+0

是否真的需要執行比較'> 0',我的印象是如果$('#content h1')。length'返回'0','length'將返回'false',而'true'如果'> 0'? –

1

它可以在短短的一行感謝來完成,以豐富的jQuery API:

$('#content:has(h1)').buildTableOfContent(); 
+0

+1,非常好!更好的答案。 – gdoron

0

如果你不緊盯jQuery的,這僅僅是

if (document.getElementById("content").getElementsByTagName("H1")[0]) { 
    ...build TOC... 
}