JQuery检测标记是否自动关闭

JQuery检测标记是否自动关闭,jquery,Jquery,是否有一种方法可以检测标记是否像图像标记一样使用JQuery自动关闭?动态的东西,而不仅仅是图像标签 if ($('.selector')[0].tagName.toLowerCase()=="img") { // do something } 您需要区分空元素和自动关闭元素吗?如果没有,您可以使用: if ($(".selector").is(":empty")) { // do something } 但是,如果您要检测给定的HTML标记是否应为空,则不能以编程方式执行此操作

是否有一种方法可以检测标记是否像图像标记一样使用JQuery自动关闭?动态的东西,而不仅仅是图像标签

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,这段代码可以接触,你也会有标签等。边缘案例,但值得一提。