如何只使用HTML中的jQuery获取没有标签的直接文本

时间:2011-12-24 12:43:13

标签: jquery html

我有一个HTML:

<strong>1)</strong>TEXT THAT I ONLY NEED<p>some par</p><ul>..</ul>

我只需要“我只需要的文字”,而不是HTML中的任何标签,我怎样才能用jQuery获取它?

8 个答案:

答案 0 :(得分:38)

最好的方法是.clone()您的对象,.remove()所有.children(),然后使用.end()返回对象,最后得到.text() }。

该方法在this blog post中描述。

$("strong")
        .clone()    //clone the element
        .children() //select all the children
        .remove()   //remove all the children
        .end()  //again go back to selected element
        .text();    //get the text of element

答案 1 :(得分:3)

这很棘手,因为文本在文本节点中,而jQuery不支持文本节点,只支持元素。此外,因为不同的浏览器以不同的方式处理HTML代码中的空格,所以最终在不同的浏览器中使用不同的节点集。您不仅可以获取节点,还可以依赖于所需的文本节点始终处于同一索引。

您可以使用jQuery定位元素,并使用DOM获取其中的所有节点。

示例HTML:

<div id="test">
  <strong>1)</strong>
  TEXT THAT I ONLY NEED
  <p>some par</p>
  <ul>
    <li>asdf</li>
    <li>qwerty</li>
  </ul>
</div>

使用jQuery查找div,使用[0]从jQuery对象中获取DOM元素,使用childNodes属性获取其子元素:

var nodes = $('#test')[0].childNodes;

然后,您可以使用jQuery循环遍历节点以查找strong元素的节点:

var index;
$.each(nodes, function(i,e){
  if (e.tagName == 'STRONG') {
    index = i;
    return false;
  }
});

现在您可以使用DOM从下一个节点获取文本值:

var text = nodes[index + 1].nodeValue;

答案 2 :(得分:2)

好吧,如果你使用jQuery,你会做

$('.selector').text();

more info and examples here

编辑:我刚看到你想要的文本不在任何标签中 - 这不是直接可能的(事实上,html文档中的每个文本都在一些HTML标签内。)

在这种情况下,我会尝试更改标记(最简单的方法),因此所需的文本在html标记内。 如果无法做到这一点,可以使用上面提到的text()方法从父元素中获取整个文本,然后在必须减去不需要的部分之后。

有关如何减去字符串的示例,请参阅http://jsfiddle.net/3SSAR/1/

请记住使用substr而不是-来减去javascript中的字符串

答案 3 :(得分:1)

此代码适用于我:

var el = $("<div/>");
el.html(text).children().remove();
return el.text();

答案 4 :(得分:0)

var name = $($(YourElementOuterHTML)).children().remove().end().text();

例如: -

var name = $($(li).find("a").get(0).outerHTML).children().remove().end().text(); 

答案 5 :(得分:0)

var element = $('#element');
var tags = element.find('*');
tags.remove();
var plainText = element.text().trim();
alert(plainText); // prints TEXT THAT I ONLY NEED
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- html -->
<div id='element'>
  <strong>1)</strong>TEXT THAT I ONLY NEED
  <p>some par</p>
  <ul>..</ul>
</div>

提琴:https://jsfiddle.net/2b5dh4xc/

答案 6 :(得分:0)

还有另一种使用vanila/pure JavaScript的方法

const el = document.getElementById('element');
const elNodes = el.childNodes;
let plainText = "";
for(i=0;i<elNodes.length;i++){
   if(elNodes[i].nodeName == '#text'){
     plainText+=elNodes[i].textContent;
   }
}
console.log(plainText); // prints TEXT THAT I ONLY NEED
<!-- html -->
<div id='element'>
  <strong>1)</strong>TEXT THAT I ONLY NEED
  <p>some par</p>
  <ul>..</ul>
</div>

答案 7 :(得分:-3)

你的加价并不是最好的。如果您使用跨度包装所需的文本,例如:

<span class="gettext">TEXT THAT I NEED</span>

您可以在jQuery中使用$('.gettext').text();