如何检查是否$(this)
是一个div
,ul
还是blockquote
?
例如:
if ($(this) is a div) {
alert('its a div!');
} else {
alert('its not a div! some other stuff');
}
Answers:
像这样:
if(this.tagName == 'DIV') {
alert("It's a div!");
} else {
alert("It's not a div! [some other stuff]");
}
this
。$(this).get(0)
接受this
(一个普通的JS DOM节点),将其转换为jQuery对象,然后运行run .get(0)
,它选择jQuery对象中的第一个常规DOM节点...也就是说,将您带回到开始的地方。this.tagName = $(this)[0].tagName = $(this).get(0).tagName
。
this
已经是一个DOM元素。试一试this === $(this).get(0)
。
检查此元素是否为DIV
if (this instanceof HTMLDivElement) {
alert('this is a div');
}
HTMLUListElement
UL相同,块
HTMLQuoteElement
引用相同
if(this.tagName.toLowerCase() == "div"){
//it's a div
} else {
//it's not a div
}
编辑:在我写作时,给出了很多答案,对不起
$(this).tagName
完全是错误的。您是说$(this).attr('tagName')
通过jQuery,您可以使用$(this).is('div')
:
针对选择器,元素或jQuery对象检查当前匹配的元素集,如果这些元素中的至少一个与给定参数匹配,则返回true。
我正在增强Andreq Frenkel的答案,只是想添加一些内容,而且变得太冗长,所以在这里...
考虑CustomElements扩展现有元素,并且仍然能够检查某个元素是否为例如input
,这使我认为这instanceof
是解决此问题的最佳解决方案。
但是,应该知道,它instanceof
使用了引用相等,因此HTMLDivElement
父窗口与其窗口iframe
(或影子DOM的窗口)不同。
要处理这种情况,应使用检查元素自己窗口的类,例如:
element instanceof element.ownerDocument.defaultView.HTMLDivElement
古老的问题,但由于没有一个答案提及此问题,因此,没有jquery的现代替代方法可能只是使用CSS选择器和 Element.matches()
element.matches('div, ul, blockquote');
$(this).get(0)
等于this
但没有开销吗?