如何获取没有子元素的元素的文本?element.textContent
和element.innerText
似乎都不起作用。
HTML:
<body>
<h1>Test Heading</h1>
<div>
Awesome video and music. Thumbs way up. Love it. Happy weekend to you and your family. Love, Sasha
</div>
</body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript">
fool("body");
</script>
下面是fool
函数:
jQuery.fn.justtext = function(text) {
return $(this).clone()
.children()
.remove()
.end()
.text();
};
function fool(el) {
reverse(el);
function reverse(el) {
$(el).children().each(function() {
if($(this).children().length > 0) {
reverse(this);
if($(this).justtext() != "")
reverseText(this);
} else {
reverseText(this)
}
});
}
function reverseText(el){
var text = el.textContent;
var frag = text.toString().split(/ /);
var foo = "";
var punctation_marks = [".",",","?","!"," ",":",";"];
for(i in frag){
if(punctation_marks.indexOf(frag[i]) == -1)
foo += actualReverse(frag[i],punctation_marks) + " ";
}
el.textContent = foo;
}
function actualReverse(text,punctation_marks) {
return (punctation_marks.indexOf(text.split("")[text.split("").length-1]) != -1)?text.split("").slice(0,text.split("").length-1).reverse().join("") + text.split("")[text.split("").length-1] : text.split("").reverse().join("");
}
}
edit:使用node.nodeType
并没有真正帮助,原因如下:想象下面的HTML
<td class="gensmall">
Last visit was: Sat Mar 31, 2012 10:50 am
<br>
<a href="./search.php?search_id=unanswered">View unanswered posts</a> | <a href="./search.php?search_id=active_topics">View active topics</a>
</td>
如果我使用nodeType
,只有a
元素的文本会改变,而td
本身不会改变(“last visit...”)。
4条答案
按热度按时间0lvr5msh1#
只需要找到文本节点:
等一下,我会测试一下:-)(似乎可以工作)
628mspwn2#
这段代码实现了与其他两个答案相同的结果,但以更有表现力的功能方式。所有现代浏览器(IE9及以上)都支持
filter
和map
数组方法。把这个扔在那里,因为其他的答案现在有点过时了。
yptwkmov3#
元素的文本也是一个单独的节点。考虑这段代码:
当你说你想要元素的文本时,你的意思是什么?只是直接的子元素吗?
这段代码可能会有所帮助:
63lcw9qa4#
除了像Pointy这样的答案,处理
<br/>
的换行符可以这样做: