Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jquery/javascript检查是否存在任何子节点_Javascript_Jquery - Fatal编程技术网

使用jquery/javascript检查是否存在任何子节点

使用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

我有一个带有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 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')