检查div之后是否存在某事

时间:2012-04-04 10:09:33

标签: javascript jquery html

只是想知道,我能做些什么来检查div之后是否存在任何东西。 在此示例中,在这种情况下应返回 True

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

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

在这种情况下,应该返回错误

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

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

4 个答案:

答案 0 :(得分:2)

不确定是否存在更短的方式:

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

基本上我们首先检查是否有任何使用next()的元素节点(所以,<br/>或其他元素),如果有,那就足够了。否则,我们检查是否有任何nextSibling对象,并且它是否具有非空字符串的值(因此不考虑任何空格)。

答案 1 :(得分:1)

是的,您可以将DOM用于此

alert($('div#text').is(':not(:last)') || $.trim($('div#text')[0].nextSibling.nodeValue).length > 0);

在第三种情况下返回false:

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

答案 2 :(得分:1)

看看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. 查找该列表中特定元素的索引,检查它是否是最后一个

答案 3 :(得分:0)

这是因为jquery没有提供获取文本节点的便捷方法。您可以使用容器.contents()确实返回文本节点,然后遍历它以查看有问题的div之后的内容。要查看节点是否为文本节点,它具有nodeType == 3。