2

所以如果我调用这个函数:

$("#item").text()

在这个 HTML 代码上:

<div id="item">
<pre><span class="cm-tag">&lt;html&gt;</span></pre><pre><span class="cm-tab">    </span>asdf</pre><pre><span class="cm-tag">&lt;/html&gt;</span></pre>
</div>

它返回:

'<html>    asdf</html>'

我希望它返回:

'<html>
    asdf
</html>'

基本上我需要在每个<pre>标签后换行......我该怎么做?

4

4 回答 4

1

一个可能的解决方案,获取每个 pre 的文本并用新行加入它们:

var text = $("#item pre").map(function(){
    return $(this).text();
}).get().join('\n');

这是jsfiddle:http: //jsfiddle.net/uGGFe/

于 2012-06-26T04:26:50.770 回答
0
var text = '';
$("#item pre").map(function(i, el) {
    return $(el).text().replace(/\s/g, '')
}).each(function(i, val) {
    if (i == 0) 
        text += val.concat('\n\t');
    else
        text += val.concat('\n');
});

​工作 样本

于 2012-06-26T05:26:06.943 回答
0

因为 jQuery 搜索匹配 htmlElement 使用正则表达式,当正则表达式匹配内容时首先删除“\r\n”,所以你看到的内容没有“\r\n”

于 2012-06-26T06:45:55.827 回答
0

您的另一个选择:

var clone = $("#item").clone(); //create a clone we can manipulate
clone.find('pre').after('\n');  //stick new lines in after <pre> tags
alert(clone.text());            //behold the alert glory

http://jsfiddle.net/SrV9c/1/

于 2012-06-26T04:48:17.913 回答