检查div后是否存在某些东西
想知道,我能做些什么来检查div后是否存在任何东西。 在这个例子在这个情况下,应返回真:检查div后是否存在某些东西
在这种情况下应该返回假:
我尝试使用$ ('#text')。next()。长度,但不工作。特殊为第一个例子。
不知道但是如果存在一个较短的方式:
var text = $("#text"),
hasNext = !!(text.next().length || (text[0].nextSibling && $.trim(text[0].nextSibling.nodeValue)));
基本上我们检查如果有任何Element节点使用next()
(so,<br/>
或其他元素),如果存在的话,这是第一个地方,那就足够了。否则,我们检查是否存在任何nextSibling
对象,以及它是否具有非空字符串的值(因此不考虑任何空格)。
感谢为我工作,并在任何解决方案? – 2012-04-10 11:08:28
我没有尝试,但我相信你可以在上面的'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:
如果有一个空白节点后面跟着一个标签 – 2012-04-04 11:23:44
@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"
});
}
此代码执行以下操作:
- 争夺的所有节点,包括文本和注释节点,并检查它们是否东西
- 它计算这些节点
- 找到该列表内特定元素的索引,检查它是否是最后一个
你的意思是下一个div,或者div里面有东西吗? – sbhomra 2012-04-04 10:13:11