【发布时间】:2011-12-14 22:36:49
【问题描述】:
是否可以使用 jquery text() 函数来删除字符串中的所有 HTML?
带有 HTML 标记的字符串:myContent = '<div id="test">Hello <span>world!</span></div>';
结果必须是:Hello world!
【问题讨论】:
是否可以使用 jquery text() 函数来删除字符串中的所有 HTML?
带有 HTML 标记的字符串:myContent = '<div id="test">Hello <span>world!</span></div>';
结果必须是:Hello world!
【问题讨论】:
var myContent = '<div id="test">Hello <span>world!</span></div>';
alert($(myContent).text());
这会导致你好世界。这能回答你的问题吗?
【讨论】:
$(myContent) 将失败——$("<div>"+myContent+"</div>") 确保这永远不会成为问题,因此,这里有更好的答案.
我创建了这个测试用例:http://jsfiddle.net/ccQnK/1/,我使用了带有正则表达式的 Javascript 替换函数来得到你想要的结果。
$(document).ready(function() {
var myContent = '<div id="test">Hello <span>world!</span></div>';
alert(myContent.replace(/(<([^>]+)>)/ig,""));
});
【讨论】:
<3 love ya <br />这样的文字
如果你需要删除 HTML 但不知道它是否真的包含任何 HTML 标签,你不能直接使用 jQuery 方法,因为它返回非 HTML 文本的空包装器。
$('<div>Hello world</div>').text(); //returns "Hello world"
$('Hello world').text(); //returns empty string ""
您必须将文本包装在有效的 HTML 中:
$('<div>' + 'Hello world' + '</div>').text();
或者使用可以处理 HTML 和非 HTML 文本的方法 $.parseHTML()(从 jQuery 1.8 开始):
var html = $.parseHTML('Hello world'); //parseHTML return HTMLCollection
var text = $(html).text(); //use $() to get .text() method
加上 parseHTML 完全删除了脚本标签,这对于用户输入的反黑客保护非常有用。
$('<p>Hello world</p><script>console.log(document.cookie)</script>').text();
//returns "Hello worldconsole.log(document.cookie)"
$($.parseHTML('<p>Hello world</p><script>console.log(document.cookie)</script>')).text();
//returns "Hello world"
【讨论】:
另一种选择:
$("<p>").html(myContent).text();
【讨论】:
你不能只try it吗?
myContent = '<div id="test">Hello <span>world!</span></div>';
console.log($(myContent).text()); //Prints "Hello world!"
注意,你需要将字符串包装在一个jQuery对象中,否则它显然不会有text方法。
【讨论】:
我发现在我的具体情况下,我只需要修剪内容。也许不是问题中提出的答案。但我想我还是应该添加这个答案。
$(myContent).text().trim()
【讨论】: