UpH*_*lix 31 javascript jquery dom
我有一个函数,我希望能够允许传入常规的javascript DOM元素对象或jQuery对象.如果它还不是jQuery对象,那么我将把它作为一个.
有谁知道一种非常可靠的方法来检测这一点.
function functionName(elm){
//Detect if elm is not a jquery object in condition
if (elm) elm = $(elm);
}
Run Code Online (Sandbox Code Playgroud)
逻辑方法是检测DOM元素对象的一个属性.问题是,哪个属性最可靠?
我也可以把它变成一个jquery对象,因为jQuery没有像以下那样的问题:$($ imajQueryObjAlready); 但是,这个问题的目的不仅仅是解决问题,而是找到一种检测DOM对象与jQuery对象的好方法.
use*_*716 60
要测试DOM元素,可以检查其nodeType属性:
if( elm.nodeType ) {
// Was a DOM node
}
Run Code Online (Sandbox Code Playgroud)
或者您可以检查jQuery属性:
if( elm.jquery ) {
// Was a jQuery object
}
Run Code Online (Sandbox Code Playgroud)
kar*_*m79 13
要测试jQuery对象,可以使用instanceof运算符:
if(elm instanceof jQuery) {
...
}
Run Code Online (Sandbox Code Playgroud)
要么:
if(elm instanceof $) {
...
}
Run Code Online (Sandbox Code Playgroud)
最简单的方法是简单地将它传递给jQuery函数.如果它已经是一个jQuery对象,它将保持不变:
function(elem){
elem = $(elem);
...
}
Run Code Online (Sandbox Code Playgroud)
从jQuery源代码,这是正在发生的事情:
if (selector.selector !== undefined) {
this.selector = selector.selector;
this.context = selector.context;
}
return jQuery.makeArray( selector, this );
Run Code Online (Sandbox Code Playgroud)
其中makeArray将新的(默认)jQuery对象与传入的jQuery对象合并.
elm instanceof jQuery是最简单的方法,因为测试elm.nodeType会误认为{nodeType:1}是DOM元素,测试elm.jquery会误认为{jquery:$()}jQuery对象,此外还不能保证未来的jQuery对象不会有jquery属性.