Javascript 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

是否有任何方法可以检查给定的变量是不是空的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-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对象具有
节点类型是不寻常的,但你说得很好。不寻常,但可能出现假阳性。我已经用一个简化的版本更新了。目前我想不出一种方法来制造误报。