检查div后是否存在某些东西

问题描述:

想知道,我能做些什么来检查div后是否存在任何东西。 在这个例子在这个情况下,应返回检查div后是否存在某些东西

http://jsfiddle.net/BsqTg/1/

http://jsfiddle.net/BsqTg/2/

在这种情况下应该返回

http://jsfiddle.net/BsqTg/3/

我尝试使用$ ('#text')。next()。长度,但不工作。特殊为第一个例子。

+0

你的意思是下一个div,或者div里面有东西吗? – sbhomra 2012-04-04 10:13:11

不知道但是如果存在一个较短的方式:

var text = $("#text"), 
    hasNext = !!(text.next().length || (text[0].nextSibling && $.trim(text[0].nextSibling.nodeValue))); 

基本上我们检查如果有任何Element节点使用next()(so,<br/>或其他元素),如果存在的话,这是第一个地方,那就足够了。否则,我们检查是否存在任何nextSibling对象,以及它是否具有非空字符串的值(因此不考虑任何空格)。

+0

感谢为我工作,并在任何解决方案? – 2012-04-10 11:08:28

+0

我没有尝试,但我相信你可以在上面的'previousSibling'中用'prev()'和'nextSibling'替代'next()'。 – ZER0 2012-04-10 14:22:42

这是因为jquery没有提供获取文本节点的方便方法。您可以使用容器.contents(),它返回文本节点,然后循环查看该div后面的内容。要看到,如果一个节点是它的nodeType ==文本节点3.

是的,你可以使用DOM这种

alert($('div#text').is(':not(:last)') || $.trim($('div#text')[0].nextSibling.nodeValue).length > 0); 
你的第三个案件

返回FALSE:

http://jsfiddle.net/BsqTg/8/

+0

如果有一个空白节点后面跟着一个标签 – 2012-04-04 11:23:44

+0

@SalmanA,感谢您指出了这一点,这将不起作用。编辑 – 2012-04-04 11:34:16

看一看this demo。我把所有三个案例合并为一个。该代码是这样的:

var $contents = $(this).contents().filter(function() { 
    // modify the following line to indicate what recon as "something" 
    return (this.nodeType == 1 || this.nodeType == 3) && /\S/.test(this.nodeValue); 
}); 
var $text = $(this).find(".text:first"); 
if (console && console.log) { 
    console.log($contents, $contents.index($text), $contents.length); 
} 
if ($contents.index($text) == $contents.length - 1) { 
    $(this).css({ 
     background: "#F99" 
    }); 
} 
else { 
    $(this).css({ 
     background: "#9F9" 
    }); 
} 

此代码执行以下操作:

  1. 争夺的所有节点,包括文本和注释节点,并检查它们是否东西
  2. 它计算这些节点
  3. 找到该列表内特定元素的索引,检查它是否是最后一个