2010-02-18 39 views
8

有没有一种方法可以检测标记是否像JQuery一样自动关闭,如图像标记?动态的东西不仅仅是一个图像标签。JQuery检测标记是否自行关闭

if ($('.selector')[0].tagName.toLowerCase()=="img") { 
    // do something 
} 
+0

为什么你需要找到这一点? – cletus 2010-02-18 21:46:43

+0

@cletus:从OP的上一个问题的茎:http://stackoverflow.com/questions/2291434/jquery-check-if-prepend-failed – Sampson 2010-02-18 21:47:24

回答

2

您是否需要区分空元素与自闭元素?如果没有,你可以使用:

if ($(".selector").is(":empty")) { 
    // do something 
} 

但是,如果你在谈论检测一个给定的HTML标签是否应该是空的或不,不,你不能这样做编程,因为你不是从创建无效停止HTML,你需要根据DTD进行验证才能发现。

+0

这适用于我的目的,以上也是,但我认为这是最干净的答案。 – Hatchware 2010-02-18 21:56:47

10

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 
} 
+1

这应该是公认的答案。 – 2016-03-01 16:28:07

0

您可以检查.html()访问,看看它是否会返回一个空字符串。虽然这将在<p></p>上返回true,但我会为所有可能被视为自闭标签的意图和目的进行成像。

3

你需要一点背景。通过网络发送的HTML标记由浏览器解析为DOM树。在这一点上,原始标记消失了,达到了目的,并且不再存在。在元素上执行innerHTML时,这不是生成元素的文字HTML,而是浏览器对该DOM子树的序列化。

重点是,<div /><div></div>之间没有什么不同。所以看看它是否有任何孩子。如果不是,则元素确实有有一个可能的XHTML表示,它使用自闭标记。

element.children().length == 0 

或克莱说:

element.is(":empty") 
+1

'children()'不返回文本节点。正如jQuery实现它,你应该使用'element.contents()。length'而不是'element.children()。length'。 Children()返回所有子项_tag_元素。 Contents()返回所有子元素_tag_元素**加**全部node_text。例如:'$('

hello
').children().length'返回0,而'$('
hello
').contents()。length'返回1。 – 2015-05-05 18:22:59