假設我有以下要求:將元素e
添加到ID爲"x"
的元素(如果存在此元素),否則將e
添加到正文中。有沒有一種優雅的方式來選擇JQuery中的元素,如果另一個不存在?
在DOM 0級,我可以這樣寫:
var parent = document.getElementById("x") || document.body;
parent.appendChild(e);
在jQuery中,下列不不工作:
var parent = $("#x") || $("body");
parent.append(e);
,因爲如果與ID x
不存在元素,第一間斷返回空的jquery對象,與truthy,而不是falsy,所以append
什麼都不做。我可以,但是,寫:
var parent = $("#x")[0] || $("body")[0];
parent.appendChild(e);
但這種方法是有點笨拙,因爲索引jQuery對象得到我回HTML元素,所以我必須用appendChild
代替append
。雖然這是有效的,但我想知道這種混合程度是否合適或是否表明設計不好。
可能有辦法使用first()
?也許我可以創建一個jQuery對象,它本質上是一個數組,其第一個元素是id爲x的div,第二個元素是body。我知道我可以用帶有元素數組的jQuery構造函數來做到這一點,但是我回到了混合層次。我也知道如何檢查id爲x($("#x").length
)的元素的存在,但我無法看到這將如何優雅地使用「id爲id的元素(如果它存在,否則爲body)」。
這樣的表述是否存在?
哦,這很漂亮,不過 - 除非jQuery在這裏運行一些非常嚴肅的魔法 - 它在返回第一個元素之前選擇* all *元素的性能缺點,而不是短路。儘管如此,如果我們關心這種性能水平,我們確實不應該首先使用jQuery。 – Matchu 2012-07-22 03:34:31
不,這不起作用,因爲[「返回的jQuery對象中DOM元素的順序可能不一樣,因爲它們將按照文檔順序。」](http://api.jquery.com/multiple-選擇器/),例如:http://jsfiddle.net/ambiguous/edYY6/。這會每次給你'
'。 – 2012-07-22 03:35:19同意這是非常好的。我們可以與每一個儘管(或應該),因爲第一個有一個ID,這應該是獨一無二的頁面,第二個** **身體元素。 HTML中只能有一個。 – 2012-07-22 03:35:48