2011-12-24 49 views
21

我有一个HTML:jQuery的:如何获得唯一的直接文本没有标签(在HTML)

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

我只需要“文本我只需要”未在withing任何标签他的HTML,我怎样才能得到它与jQuery?

谢谢。

+2

你[答案率(http://meta.stackexchange.com/questions/16721/how-does-accept-rate-work)是相当低的,你应该看看,以纪念的问题,你的答案有人问(即使这意味着标记你自己的答案)。 – isNaN1247 2011-12-24 12:49:38

+1

可能重复的[jQuery:使用.text()检索仅嵌入子标签中的文本](http://stackoverflow.com/questions/3442394/jquery-using-text-to-retrieve-only-text-not -In-child-tags) – 4imble 2015-02-04 09:12:53

回答

2

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

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

more info and examples here

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

在这种情况下,我会尝试更改标记(最简单的方法),以便所需的文本位于html标记内。 如果这是不可能的,你可以使用上面提到的text()方法从父元素中获取整个文本,并且在你不得不减去你不想要的部分之后。

看到http://jsfiddle.net/3SSAR/1/有关如何减去字符串的例子..

只记得使用substr,而不是-减去字符串在javascript

+3

这将返回“1)TEXT,我只需要一些参数”。 http://jsfiddle.net/3SSAR/ – 2011-12-24 12:51:22

+0

它将返回所有嵌套标记 – WHITECOLOR 2011-12-24 12:52:50

+0

中的所有文本,请参阅我的编辑 – tmaximini 2011-12-24 12:53:09

-1

您的标记是不是最大的这一点。如果包裹文本,你想用一个跨度,如:

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

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

+0

它不是我的标记我需要解析它 – WHITECOLOR 2011-12-24 12:52:07

+0

对不起,我没有意识到,我你不能改变它。在这种情况下,我会建议像坦率的暴雪编辑的答案上面 – isNaN1247 2011-12-24 13:19:07

2

这很棘手,因为文本位于文本节点中,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]得到的DOM元素了jQuery对象,而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; 
+0

谢谢,鳕鱼:.clone()。children(“strong,p,ul”)。remove().end().text()需要 – WHITECOLOR 2011-12-24 15:49:40

+0

@WHITECOLOR:该代码将连接元素中的所有文本节点,因此它依赖于您没有更多文本或子元素之间存在任何换行符。 – Guffa 2011-12-24 16:04:32

1

此代码的工作对我来说:

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

最好的办法是到.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 
相关问题