JQuery检测标记是否自动关闭
是否有一种方法可以检测标记是否像图像标记一样使用JQuery自动关闭?动态的东西,而不仅仅是图像标签JQuery检测标记是否自动关闭,jquery,Jquery,是否有一种方法可以检测标记是否像图像标记一样使用JQuery自动关闭?动态的东西,而不仅仅是图像标签 if ($('.selector')[0].tagName.toLowerCase()=="img") { // do something } 您需要区分空元素和自动关闭元素吗?如果没有,您可以使用: if ($(".selector").is(":empty")) { // do something } 但是,如果您要检测给定的HTML标记是否应为空,则不能以编程方式执行此操作
if ($('.selector')[0].tagName.toLowerCase()=="img") {
// do something
}
您需要区分空元素和自动关闭元素吗?如果没有,您可以使用:
if ($(".selector").is(":empty")) {
// do something
}
但是,如果您要检测给定的HTML标记是否应为空,则不能以编程方式执行此操作,因为您没有停止创建无效的HTML,您需要根据DTD对其进行验证以找出原因。jQuery在内部使用此列表:
/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i
您也可以这样做:
if(/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i.test($('.selector')[0].tagName)) {
//do something
}
您可以检查
.html()
访问器,查看它是否返回空字符串。虽然这将在上返回真值,但我想为所有意图和目的成像,可以将其视为一个自动关闭标签。您需要一点背景。通过网络发送的HTML标记由浏览器解析为DOM树。在这一点上,原始的标记已经消失,达到了它的目的,并且不再存在。在元素上执行innerHTML
时,生成元素的不是文本HTML,而是浏览器对DOM子树的序列化
element.children().length == 0
关键是,
和
之间没有区别。看看有没有孩子。如果没有,元素确实有一个可能的XHTML表示,它使用了一个自动关闭标记
element.children().length == 0
或者正如克莱特斯所说:
element.is(":empty")
你为什么要找出这个问题?@cletus:源于OP的前一个问题:这对我来说是有效的,上面的也是,但我认为这是最清晰的答案。children()
不返回文本节点。在jQuery实现时,应该使用element.contents().length
而不是element.childrence().length
。Children()返回所有子标记元素。Contents()返回所有子标记元素加上所有节点文本。示例:$('hello').children().length
返回0,而$('hello').contents().length
返回1。可靠答案,但此列表中缺少标记。(也许是在过去8年里加上的:P)也意识到:失踪。这是一个更大的交易。如果你有内联SVG,这段代码可以接触,你也会有标签等。边缘案例,但值得一提。