从JQuery中的字符串中删除动态字符串

时间:2015-08-21 06:12:56

标签: javascript jquery

我有一个html字符串,其中包含一个表格标记。表标签中可能有各种标签(tr' s / td'等)。

如何从字符串中删除标记,同时保留其余的html?

即:

如果我的字符串是

"<p>testing<table><tr><td>cell 1</td></tr></table> a table</p>" 

然后我希望结果是

"<p>testing a table</p>" 

编辑:

提供更多细节:我无法控制html,而p只是一个例子,它可以是标签之外的任何组合或纯文本(尽管只有1个表)< / p>

编辑2:

参见上文&#39;如何从字符串中删除标记,同时保留其余的html?&#39;这意味着如果(表外)有一个粗体或强调的元素,那么该标记不应该被阻止

5 个答案:

答案 0 :(得分:3)

只需删除所有标记,然后在p元素中追加剩余的内容(原始文本)。没有正则表达式,没有火箭科学。

答案 1 :(得分:1)

使用删除方法

如果浏览器允许您将table之类的块元素放在p中,这将起作用:
var p_el = $("<p>testing<table><tr><td>cell 1</td></tr></table> a table</p>")
# Note: This gets slit into 3 elements: p, table, p. This would not
#       happen with a table inside a block element like a `div`

# Find all table elements and remove them:
p_el.find('table').remove()

# If you want the string back you can do:
p_el[0].outerHTML  # p_el[0] gets the DOM object from the jQuery object

# If the string has already been rendered, then of course you should use the 
# appropriate selector to find the `table` elements within `p` elements and then remove them:
$('.someParentEl p table').remove()

# If you need to remove multiple types of elements, then a more elaborate
# selector can be used within remove. I recommend reading up on jQuery selectors
# But an example might be to exclude div tags as well:
$('.someParentEl p').find('table, div').remove()

# What I suspect is that you actually want to remove all block elements from the string
# (table, div, etc. leaving b, i, strong, span, etc.):
$('.someParentEl p *').filter(function(index) {return $(this).css("display") === 'block'}).remove()
# Note: This will only work on elements already in the DOM.

相关:Why is <table> not allowed inside <p>
并且:Nesting block level elements inside the <p> tag... right or wrong?

如果您确实正在处理DOM中段落内的表格,那么这是另一种蠕虫病毒,而且我不确定如何在客户端持续清理这些混乱。

如果p在您的示例中只是一个不幸的选择,那么我的所有示例都应该与p替换。

答案 2 :(得分:1)

简单易懂的查询。

  

但是表格不应该包含在p标签内部。你需要使用其他html标签。我用div而不是p标签。

copy_int()

答案 3 :(得分:0)

您可以使用以下代码删除标记。

$('tag_to_remove').contents().unwrap();

选中fiddle

答案 4 :(得分:-1)

我认为你的html输出错误,当你在浏览器中执行这个html时,它会显示如下:

 <p>testing</p>
    <table>
        <tbody>
            <tr>
                <td>cell 1</td>
            </tr>
        </tbody>
    </table>
    a table

所以,当你试图把文字放在里面时,&#34; p&#34;标记您将获得&#34;测试&#34;作为输出。如果html正确,那么您可以尝试使用

删除表
$('p table').remove();

然后你就可以获得所需的输出。希望这会对你有所帮助。