我有一个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;这意味着如果(表外)有一个粗体或强调的元素,那么该标记不应该被阻止
答案 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)
答案 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();
然后你就可以获得所需的输出。希望这会对你有所帮助。