Javascript 从列表标记中检索文本,但不';t计算子标记
我正在尝试检索Javascript 从列表标记中检索文本,但不';t计算子标记,javascript,jquery,Javascript,Jquery,我正在尝试检索中文本的计算,但我不需要在此计算中考虑子标记。 因此,当我添加以下内容时,它将自然计算中的所有文本 $('ul li').text().length; 从HTML: <ul> <li>Count me<p>Don't count me please.</p></li> </ul> 数一数我请不要数一数我 有什么可能的方法可以实现这一点,从而不计算子标签文本?只需减去它即可 var x = $(
中文本的计算,但我不需要在此计算中考虑子标记
。
因此,当我添加以下内容时,它将自然计算
中的所有文本
$('ul li').text().length;
从HTML:
<ul>
<li>Count me<p>Don't count me please.</p></li>
</ul>
- 数一数我请不要数一数我
有什么可能的方法可以实现这一点,从而不计算子标签文本?只需减去它即可
var x = $('ul li').text().length;
var y = $('ul li p').text().length;
console.log(x);
console.log(y);
console.log(x-y);
您可以克隆元素,删除子元素,然后提取文本:
var li = $('ul li').clone();
li.children().remove();
console.log(li.text().length);
无论子元素的数量或类型如何,这都会起作用。通过选择器检索文本的常用方法将证明是困难的,因为
text()
方法是贪婪的,即使通过选择器排除子元素,也会获取可用的所有文本
如果您只需要检索直接位于li
中的文本,那么您只能从contents()
中获取textNode
值:
可能重复的:
这里有一个更新的JSFIDLE:是您不想考虑的子标记,还是子标记的内容?不需要parseInt
var textNodes = $('ul li').contents().filter(function() {
return this.nodeType == 3;
}).get();
console.log(textNodes[0]); // = "Count me"
var len1 = $('ul li').text().length;
var len2 = $('ul li p').text().length;
console.log(len1+'=='+len2);
var liLength = parseInt(len1)-parseInt(len2);
console.log(liLength);
$('ul li').clone().children().remove().end().text();