Javascript jQuery-检查变量是否为dom元素
是否有任何方法可以检查给定的变量是不是空的jQuery对象还是本机DOM元素 那就好像Javascript jQuery-检查变量是否为dom元素,javascript,jquery,dom,Javascript,Jquery,Dom,是否有任何方法可以检查给定的变量是不是空的jQuery对象还是本机DOM元素 那就好像 isDomElem( $("#some-existing-element") ); //returns true isDomElem( $("#some-existing-element")[0] ); //returns true isDomElem( $("#non-existing-element")[0] ); //returns false isDomElem( "#some-existing-el
isDomElem( $("#some-existing-element") ); //returns true
isDomElem( $("#some-existing-element")[0] ); //returns true
isDomElem( $("#non-existing-element")[0] ); //returns false
isDomElem( "#some-existing-element" ); //returns false
isDomElem( [0,1,2] ); //returns false
//etc...
您可以使用检查传入的对象是jQuery的实例
还是HtmleElement的实例
。如果是则返回true代码>。否则,返回false
function isDomElem(obj) {
if(obj instanceof HTMLCollection && obj.length) {
for(var a = 0, len = obj.length; a < len; a++) {
if(!checkInstance(obj[a])) {
console.log(a);
return false;
}
}
return true;
} else {
return checkInstance(obj);
}
function checkInstance(elem) {
if((elem instanceof jQuery && elem.length) || elem instanceof HTMLElement) {
return true;
}
return false;
}
}
我认为这涵盖了所有情况:
console.clear();
函数isDomElem(el){
返回HTML元素的el实例| |
HTML元素的el[0]实例?
真:假;
}
log(isDomElem($(“#一些现有元素”)//返回true
log(isDomElem($(“#一些现有元素”)[0])//返回true
log(isDomElem($(“#不存在元素”))//返回false
log(isDomElem(“#一些现有元素”)//返回false
log(isDomElem([0,1,2])//返回false
log(isDomElem(document.getElementsByClassName(“a”))//返回真值
需要记住的一点是,如果对象来自另一个文档(例如来自iframe或其他窗口),instanceof
的工作方式与您希望的不一样。对于isDomElem($(“#不存在的元素”)),这将错误地返回true
@RickHitchcock函数名可能有误导性,但它会返回OP要求的内容。如果给定变量是jQuery对象或DOM元素,OP希望函数返回true。他/她从未指定jQuery对象是否表示空的DOM元素。我假设OP希望在元素不存在时返回false。@AdamPietrasiak根据您的注释,我已进行了编辑,并在答案中添加了注释。对于HTMLCollection
的实例,将检查每个元素以确保其符合标准。如果任何一个元素失败,整个测试都会失败。我会将instanceof条件添加到其中,因为非dom对象可能具有使其返回true的属性。非dom对象具有节点类型是不寻常的,但你说得很好。不寻常,但可能出现假阳性。我已经用一个简化的版本更新了。目前我想不出一种方法来制造误报。