jquery text()删除html标签并合并文本

时间:2016-04-09 14:25:24

标签: javascript jquery

我正在尝试使用jQuery从.text()获取div文本。这是有效的,但div用作内联编辑器(tinymce),因此在那里有一些标记,例如:

<p>sometext<span id="_mce_caret" data-mce-bogus="true"><strong>sometext2</strong></span><br data-mce-bogus="1"></p>

跨度基本上是一个新行,但是在获取文本时,所有html标记都被删除(这是必需的),但文本也合并为一个“单词”:

sometextsometext2

虽然它应该是:

sometext sometext2

甚至可能是:

sometext。 sometext2。

怎么做?

这是我已经使用过的代码:

var textareaValues = jQuery('.desc-meta').map(function(){
   return jQuery(this).text();
}).get();
console.log(textareaValues);

由于

修改 关于缺少的更多信息: 我有多个div(5或6):

<div class="desc-meta">
    <p>sometext<span id="_mce_caret" data-mce-bogus="true">
    <strong>sometext2</strong></span><br data-mce-bogus="1"></p>
</div>

<div class="desc-meta">
    <p>This is some extra sometext<span id="_mce_caret" data-mce-bogus="true">
    <strong>Some extra sometext2</strong></span><br data-mce-bogus="1"></p>
</div>

<div class="desc-meta">
    <p>sometext<span id="_mce_caret" data-mce-bogus="true">
    <strong>sometext2</strong></span><br data-mce-bogus="1"></p>
</div>

这些div中的文本需要“合并”为1个字符串,所以上面的div应该是:

sometext sometext2. This is some extra sometext Some extra sometext2. sometext sometext2.

这将存储在隐藏的输入中。 所以没有html标签,但保持单词/句子之间的空格。

这是我所熟悉的jquery:

var descText = '';
jQuery('#registration-form').find('.desc-meta').each(function(){

    if (jQuery.trim(jQuery(this).text()) != "") {
        var textareaValues = jQuery('.desc-meta').map(function(){
            return jQuery(this).text();
        }).get().join(' ');

        console.log(textareaValues);

        descText = textareaValues.join(', ');

    }

});
jQuery('#description').val(descText);

2 个答案:

答案 0 :(得分:0)

我想你们希望在单词之间留一个空格,只需将空间连接起来:

ref.child('teams/red').orderByChild('sortTotals')

答案 1 :(得分:0)

如果我没弄错,你的.desc-meta就是包装。所以你应该给我们以下HTML

<div class="desc-meta">
   <p>sometext<span id="_mce_caret" data-mce-bogus="true"><strong>sometext2</strong></span><br data-mce-bogus="1"></p>
</div>

否则代码中的那个类在哪里?

所以你不是从包装器div中的元素循环。因此,您只是将desc-meta的内容作为字符串。实际上,您需要该类中元素的内容。所以我们使用find(*)来获取包装器div中的所有元素。

var textareaValues = jQuery('.desc-meta').find('*').map(function(){
   return jQuery(this).text();
}).get();
console.log(textareaValues);

这里,我们循环遍历容器中的任何元素,而不是循环遍历容器,在您的情况下,我们循环遍历pspanstrong

最终结果如下:

["sometextsometext2", "sometext2", "sometext2", ""]

注意,第一个是第一个p的内容,即p内的所有内容,最后一个空值是中断。这就是你要做的事情,并没有那么好的工作(特别是如果你不知道有多少元素,如果你这样做,那么你就得到[1]和{{ 1}}从上面开始,完成工作。

更好的方法是获取html,并自己添加空格。

[2]

上面我们得到了html,现在我们需要在每个元素的开头添加空格。

var textareaValues = jQuery('.desc-meta').map(function(){
   return jQuery(this).html();
}).get();

对于多个div容器,请使用以下

$str = textareaValues[0].split('<').join(' <');

如果您只想var str = textareaValues.join('').split('<').join(' <'); 最终结果很难看,但假设您要将其添加到页面中。

console.log($str)

最终结果是空格。

查看demo here