我有HTML标签的简单文本和引号中的一些文本我想在引号内的文本上添加span。例如:
<p>A quick "brown" fox "jumps" over <a href="www.gamescottage.com">the</a> lazy dog.</p>
我想要的是将这一行改为:
<p>A quick "<span>brown</span>" fox "<span>jumps</span>" over <a href="www.gamescottage.com">the</a> lazy dog.</p>
我正在使用此代码执行此操作:
<script>
$('document').ready(function (){
var text = $('p').html();
text = text.replace(/"(.*?)"/g, '"<span class="quote">$1</span>"');
$('p').html(text);
});
</script>
但它取代了HTML锚标记的引用以及任何解决方案?
简而言之,我只想在引号内添加span
,忽略HTML标记的引号。
答案 0 :(得分:5)
JavaScript已经为你构建了一个内置的DOM解析器 - 而不是试图用正则表达式解析HTML本身很困难且边缘不可能 - 你可以使用DOM为你带来的内置功能。在你的情况下,我将使用jQuery演示它,但非jQuery解决方案同样简单:
$("p"). // all p tags
contents(). // select the actual contents of the tags
filter(function(i,el){ return el.nodeType === 3; }). // only the text nodes
each(function(i, el){
var $el = $(el); // take the text node as a jQuery element
var replaced = $el.text().replace(/"(.*?)"/g,'<span>"$1"</span>') // wrap
$el.replaceWith(replaced); // and replace
});
答案 1 :(得分:0)
从你的代码中我假设你擅长正则表达式和脚本。这是一个算法,使用它可以编写代码。
在用当前代码替换文本后用 替换文本,获取结果字符串并检查打开的html标记内是否存在任何span标记(例如:<a ... <span>
)并替换整个HTML来自原始String的实体。通过这种方式,您可以实现您的需求。
注意:我曾经在Java中做过同样的事情我现在没有这个代码片段
希望这有助于你
答案 2 :(得分:0)
您可以分三个步骤执行此操作:
第1步:
text = text.replace(/([^>"]*)"(?=[^<]*>)/g, '$1#Q#');
这使用预测来查看在下一个>
之前引号是否跟<
第2步:
text = text.replace(/"(.*?)"/g, '<span class="quote">$1</span>');
第3步:
text = text.replace(/#Q#/g, '"');