如何检查$(this)
是div
、ul
或blockquote
?
例如:
if ($(this) is a div) {
alert('its a div!');
} else {
alert('its not a div! some other stuff');
}
如何检查$(this)
是div
、ul
或blockquote
?
例如:
if ($(this) is a div) {
alert('its a div!');
} else {
alert('its not a div! some other stuff');
}
类似这样:
if(this.tagName == 'DIV') {
alert("It's a div!");
} else {
alert("It's not a div! [some other stuff]");
}
已经发布了不使用jQuery的解决方案,所以我将发布使用jQuery的解决方案。
$(this).is("div,ul,blockquote")
检查此元素是否为 DIV
if (this instanceof HTMLDivElement) {
alert('this is a div');
}
对于无序列表,使用HTMLUListElement
;对于引用块,使用HTMLQuoteElement
。
没有使用jQuery时,可以使用this.tagName === 'DIV'
来判断。
记住tagName
中的'N'是大写。
或者,对于更多的标签:
/DIV|UL|BLOCKQUOTE/.test(this.tagName)
if(this.tagName.toLowerCase() == "div"){
//it's a div
} else {
//it's not a div
}
编辑:在我写作的过程中,很多答案已经给出了,对于重复回答感到抱歉。
$(this).tagName
是完全错误的。你的意思是 $(this).attr('tagName')
。 - Marco Faustinelli虽然这是一个老问题,但由于没有任何答案提到这一点,一个现代的替代方案,不需要使用jquery,只需使用CSS选择器和 Element.matches(),就可以实现。
element.matches('div, ul, blockquote');
有些解决方案有点过头了。你只需要使用普通的JavaScript中的tagName
就可以了。重新用jQuery包装整个内容并运行库中一些更强大的函数来检查标签名称,实际上并没有任何好处。如果你想在此页面上测试它,这里有一个例子。
$("body > *").each(function() {
if (this.tagName === "DIV") {
alert("Yeah, this is a div");
} else {
alert("Bummer, this isn't");
}
});
let myElement =document.getElementById("myElementId");
if(myElement.tagName =="DIV"){
alert("is a div");
}else{
alert("is not a div");
}
/*What ever you may need to know the type write it in capitalised letters "OPTIO" ,"PARAGRAPH", "SPAN" AND whatever */
input
,让我觉得instanceof
是解决这个问题的最佳方案。instanceof
使用引用相等性,因此父窗口中的HTMLDivElement
与其iframe
(或者影子DOM等)中的不同。element instanceof element.ownerDocument.defaultView.HTMLDivElement
$(this).get(0)
相当于this
但没有额外的开销。 - Micthis
也不是。$(this).get(0)
接受this
(一个普通的 JS DOM 节点),将其转换为 jQuery 对象,运行.get(0)
,选择 jQuery 对象中的第一个常规 DOM 节点...也就是将您带回到起点。this.tagName = $(this)[0].tagName = $(this).get(0).tagName
。 - brymck