[英]JavaScript: How can I wrap every word in a string with a span tag containing a unique id?
我想使用Javascript获取字符串的内容,并用一组<span>
标签包装每个单词。 每个span标签将具有我将生成的唯一ID属性。 如果单词已经用id包裹在span标记中,请不要理会它。 如果它具有不带id的span标记,则需要在span中放入一个id。
因此,以下内容:
this is <b>a</b> <span>bunch</span> of <span id="aopksd"><i>text</i></span>
成为:
<span id="dwdkwkd">this</span> <span id="zdkdokw">is</span> <span id="rrrsass"><b>a</b></span> <span id="lwokdw">bunch</span> <span id="poeokf">of</span> <span id="aopksd"><i>text</i></span>
关于实现此目标的最佳方法的想法? 我正在node.js的服务器端进行操作。 我更喜欢非jquery方法。
编辑:id是我将在服务器上生成的东西。 我现在只是使用占位符伪造的ID。 我将使用自己的全局唯一ID。
您可以尝试这样做,但是如果要对html标签中已有的单词进行特殊处理,则可能必须检查参数a:
var str = "Bonjour, je m'appelle Francis et je suis le plus bel homme du monde";
var regex = /\S+/g;
var id = 0;
var result = str.replace(regex, function(a) {
return "<span id=" + (++id) + ">" + a + "</span>";
});
alert(result);
现场演示: http : //jsfiddle.net/NtNtj/
编辑:如果您不想覆盖现有的ID,可以尝试此操作
var str = "Bonjour, je m'appelle <b>Francis</b> et <span id=\"existing\">je</span> suis le plus bel homme du monde";
var regex = /(<.+?<\/.+?>|\S+)/g;
var id = 0;
var result = str.replace(regex, function(a) {
var m = (/<(\w+)([^>]*)>([^<]*)<\/\w+>/).exec(a);
if (m !== null && m[1] === "span" && m[2].test(/id=/))
return a;
return "<span id=" + (++id) + ">" + a + "</span>";
});
console.log(result);
编辑:如果您可以在一个标签中包含多个单词,而您仍希望在每个单词之间进行换行,则可以使用标签中的值递归调用replace函数,如下所示:
var str = "Bonjour, <b>je m'appelle Francis</b> et <span id=\"existing\">je</span> suis le plus bel homme du monde";
var regex = /(<.+?<\/.+?>|\S+)/g;
var id = 0;
var result = str.replace(regex, function(a) {
var m = (/<(\w+)([^>]*)>([^<]*)<\/\w+>/).exec(a);
if (m !== null && m[1] === "span" && m[2].test(/id=/))
return a;
if (m !== null)
return "<" + m[1] + m[2] + ">" + m[3].replace(regex, arguments.callee) + "</" + m[1] + ">";
return "<span id=" + (++id) + ">" + a + "</span>";
});
console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.