我很好奇,爲什麼jQuery的表達帶有||的jQuery簡單表達式但不明結果
$("#mydiv").find(".myitem1") || $("#mydiv").find(".myitem2");
回報[]
如果: .myitem1
不存在於頁面上。另外,$("#mydiv").find(".myitem2")
確實存在,結果是一個非空對象。
我希望得到的結果是第一個表達式,如果它存在,否則第二個表達式。如您所見,我使用||
。我究竟做錯了什麼?
我很好奇,爲什麼jQuery的表達帶有||的jQuery簡單表達式但不明結果
$("#mydiv").find(".myitem1") || $("#mydiv").find(".myitem2");
回報[]
如果: .myitem1
不存在於頁面上。另外,$("#mydiv").find(".myitem2")
確實存在,結果是一個非空對象。
我希望得到的結果是第一個表達式,如果它存在,否則第二個表達式。如您所見,我使用||
。我究竟做錯了什麼?
的失敗的原因都在評論,但是,鑑於您正在嘗試,爲什麼不使用這個(如果它們在順序頁)邏輯的解釋:
$("#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代碼返回一個空字符串,而不會給出錯誤。
謝謝大家可能的解決方案。我找到$(「#mydiv」)。find(「。myitem1,.myitem2」)。first();最好的,因爲它很短,清晰,不會使用兩次選擇器,這就是我需要的。謝謝大家。 – Haradzieniec 2014-09-24 13:25:37
'.find()'總是返回一個jQuery集合(不是數組),它們都是*從不*虛假。 – Bergi 2014-09-24 13:02:22
你將不得不在這裏使用三元運算符$(「#mydiv」)。find(「。myitem1」)。length? $(「#mydiv」)。find(「。myitem1」):$(「#mydiv」)。find(「。myitem2」);' - 如果可能的話緩存'$(「#mydiv」)的值。 (「.myitem1」)' – 2014-09-24 13:04:54
@Arun P Johny:這是一個你不應該推薦三元的地方,因爲你運行初始選擇器兩次。緩存它是一個好主意。也許最好用一個簡單的'if' :) – 2014-09-24 13:19:22