2014-09-24 15 views
0

我很好奇,爲什麼jQuery的表達帶有||的jQuery簡單表達式但不明結果

$("#mydiv").find(".myitem1") || $("#mydiv").find(".myitem2");回報[]如果: .myitem1不存在於頁面上。另外,$("#mydiv").find(".myitem2")確實存在,結果是一個非空對象。

我希望得到的結果是第一個表達式,如果它存在,否則第二個表達式。如您所見,我使用||。我究竟做錯了什麼?

+3

'.find()'總是返回一個jQuery集合(不是數組),它們都是*從不*虛假。 – Bergi 2014-09-24 13:02:22

+1

你將不得不在這裏使用三元運算符$(「#mydiv」)。find(「。myitem1」)。length? $(「#mydiv」)。find(「。myitem1」):$(「#mydiv」)。find(「。myitem2」);' - 如果可能的話緩存'$(「#mydiv」)的值。 (「.myitem1」)' – 2014-09-24 13:04:54

+0

@Arun P Johny:這是一個你不應該推薦三元的地方,因爲你運行初始選擇器兩次。緩存它是一個好主意。也許最好用一個簡單的'if' :) – 2014-09-24 13:19:22

回答

1

的失敗的原因都在評論,但是,鑑於您正在嘗試,爲什麼不使用這個(如果它們在順序頁)邏輯的解釋:

$("#mydiv").find(".myitem1,.myitem2").first(); 

以其它方式使用:

var $result = $("#mydiv").find(".myitem1"); 
if (!$result.length){ 
    $result = $("#mydiv").find(".myitem2"); 
} 

不要像原樣使用三元表達式,因爲它會運行第一個選擇器兩次。使用三元這樣的:

var $result = $("#mydiv").find(".myitem1"); 
$result = $result.length ? $result : $("#mydiv").find(".myitem2"); 

您當前的代碼假定find回報什麼,如果一個沒有找到匹配,但是這不是jQuery的允許的方法鏈接。它會一直返回一個jQuery對象(只是一個沒有匹配的空對象)。這允許像$('#youCantMatchThis').text();這樣的jQuery代碼返回一個空字符串,而不會給出錯誤。

+0

謝謝大家可能的解決方案。我找到$(「#mydiv」)。find(「。myitem1,.myitem2」)。first();最好的,因爲它很短,清晰,不會使用兩次選擇器,這就是我需要的。謝謝大家。 – Haradzieniec 2014-09-24 13:25:37