jquery:测试输入变量是否为dom元素

moo*_*dog 11 jquery dom

我想编写一个jquery函数,它接受一个dom元素或它的id作为输入:

function myfunction(myinput){
 // pseudocode:
 // if (myinput is dom element){
 //   var myID = $(myinput).attr('id');
 // } else {
 //   var myID = myinput;
 // }

 // Do stuff with myID ...

}
Run Code Online (Sandbox Code Playgroud)

问题:如何判断myinput是否为dom元素?

Tom*_* Tu 21

反过来检查更容易 - 检查它是否是一个字符串,如果是这样,使用它来获取ID,否则将其视为DOM节点/元素并将其处理为就像它一样.

function myfunction(myinput) {

    var myId;

    if (typeof myinput == 'string'){
        myId = myinput;
    } else {
        myId = myinput.id; // myinput.id is enough
    }

    // do something

}
Run Code Online (Sandbox Code Playgroud)

或者如果你真的要检查它是否是HTMLElement,那么每个DOM html元素都会扩展HTMLElement抽象接口.检查MDC以获取有关HTMLElement的更多信息.

    ...

    if (myinput instanceof HTMLElement){
        myId = myinput.id; // myinput.id is enough
    } else {
        myId = myinput;
    }

    ...
Run Code Online (Sandbox Code Playgroud)

最后它真的不重要......你的电话!

汤姆

  • 在某些浏览器(可能是IE8)中,HTMLElement对我不起作用,所以现在我正在检查`nodeType` (2认同)

Ada*_*rax 6

您可以像这样实现您的功能:

function myfunction(myinput){

 if (myinput.nodeType){
    var myID = $(myinput).attr('id');
 } else {
    var myID = myinput;
 }

 // Do stuff with myID ...
Run Code Online (Sandbox Code Playgroud)

}

有关nodeType的更多信息.