Der Grund, warum alle vorherigen Antworten den .length
Parameter erfordern , ist, dass sie meistens den $()
Selektor von jquery verwenden, der querySelectorAll hinter den Vorhängen hat (oder ihn direkt verwenden). Diese Methode ist ziemlich langsam, da der gesamte DOM-Baum analysiert werden muss, um nach allen Übereinstimmungen mit diesem Selektor zu suchen und ein Array mit diesen zu füllen.
Der Parameter ['length'] wird nicht benötigt oder ist nicht nützlich, und der Code ist viel schneller, wenn Sie ihn direkt verwenden document.querySelector(selector)
, da er das erste Element zurückgibt, mit dem er übereinstimmt, oder null, wenn er nicht gefunden wird.
function elementIfExists(selector){ //named this way on purpose, see below
return document.querySelector(selector);
}
/* usage: */
var myelement = elementIfExists("#myid") || myfallbackelement;
Bei dieser Methode bleibt jedoch das tatsächlich zurückgegebene Objekt erhalten. Das ist in Ordnung, wenn es nicht als Variable gespeichert und wiederholt verwendet wird (so dass die Referenz erhalten bleibt, wenn wir es vergessen).
var myel=elementIfExists("#myid");
// now we are using a reference to the element which will linger after removal
myel.getParentNode.removeChild(myel);
console.log(elementIfExists("#myid")); /* null */
console.log(myel); /* giant table lingering around detached from document */
myel=null; /* now it can be garbage collected */
In einigen Fällen kann dies erwünscht sein. Es kann in einer for-Schleife wie folgt verwendet werden:
/* locally scoped myel gets garbage collected even with the break; */
for (var myel; myel = elementIfExist(sel); myel.getParentNode.removeChild(myel))
if (myel == myblacklistedel) break;
Wenn Sie das Element nicht wirklich benötigen und nur ein wahres / falsches Element erhalten / speichern möchten, verdoppeln Sie es einfach nicht !! Es funktioniert für Schuhe, die sich lösen. Warum also hier knoten?
function elementExists(selector){
return !!document.querySelector(selector);
}
/* usage: */
var hastables = elementExists("table"); /* will be true or false */
if (hastables){
/* insert css style sheet for our pretty tables */
}
setTimeOut(function (){if (hastables && !elementExists("#mytablecss"))
alert("bad table layouts");},3000);