使用jquery/javascript检查是否存在任何子节点
我有一个带有div、p和span标记的DOM结构。我想计算带有子节点的“p”标记和没有子节点的“p”标记。我在这个论坛上读到了一个解决方案,但它对我不起作用:。 拨弄 应该是使用jquery/javascript检查是否存在任何子节点,javascript,jquery,Javascript,Jquery,我有一个带有div、p和span标记的DOM结构。我想计算带有子节点的“p”标记和没有子节点的“p”标记。我在这个论坛上读到了一个解决方案,但它对我不起作用:。 拨弄 应该是 $('#test').blur(function(){ var test= $('.check p').filter(function (){ return this.childNodes.length > 0; // as HMR pointed out in the comments if
$('#test').blur(function(){
var test= $('.check p').filter(function (){
return this.childNodes.length > 0; // as HMR pointed out in the comments if you are looking for child elements then $(this).children().length will do
})
alert(test.length)
})
演示:此处:
您只需要在筛选器中返回true
,0是一个假值,其他任何值都是真值。你也把长度拼错了
childNodes是元素的属性。在将元素转换为jquery对象时,必须使用jquery方法children()
,是吗
应该选择所有空的p
标签
$('p').not(':empty')
应选择所有非空的
p
标记。首先:childNodes是html元素$的属性(这将转换jQuery对象中的html元素,而jQuery对象没有childNodes属性。第二:您想检查实际内容吗?childnodes将返回空白(新行字符、空格和制表符)作为childNode,因此,尽管其中实际上没有任何内容,但仍将返回true。$('p')。not(':empty')将返回仅包含空白的p元素。true!试过小提琴,但没有按预期效果。您能改进一下吗?要检查内容而不是节点或元素,您可以执行以下操作:(p.childNodes.length==1)?p.childNodes[0]。textContent.trim()==“”:p.childNodes。当p的值为空时,length>0
仍然不会给出假阳性,因此可能p.textContent.trim()==“”最好。请注意,只包含文本的元素将返回为没有内容(子元素)。例如,第一个p元素只包含文本,然后是($($(((“p”)[0])。children()。length==0==true)
我猜(基于他小提琴中的示例html)我假设他会查找元素而不是文本内容,我可能是错的。答案是正确的,仅供将来参考,检查内容比计算子节点要多一些工作。childNode只能是空白(将产生一个包含内容的false)元素只能有文本(检查子节点时将产生一个假负数)。如果要检查是否有任何可见内容,则要比这个复杂一点。包含空格的Html元素将有子节点,但不会有任何可见内容。我知道op询问是否存在childNodes,但为了将来的参考,检查实际内容会有点棘手。@HMR在这种情况下,我认为。长度将是一个更好的选择,当p元素只包含文本时,它将产生假阴性。答案正确地回答了这个问题,但是如果您检查的是内容而不是元素或节点,那么您就必须检查(p.childNodes.length==1)?p.childNodes[0]。textContent.trim()==“”:p.childNodes.length>0
(不确定textContent和trim是否在所有IE浏览器上都可用)@HMR yes在这种情况下,问题是文本是否被视为子节点?对于textContent,有$(p).text(),因此类似于$.trim($(p).text())==“”
以检查p元素是否包含内容。
$('p').not(':empty')
$('p:empty')
$('p').not(':empty')