假设我有这个 div:
<div> Let's say these are the words in my div </div>
我知道我可以通过这种方式将 div 中的每个单词包装成一个跨度
$("div").contents().wrap('<span class="wrapper"/>');
//output: <div><span class="wrapper"> Let's say these are the words in my div</span> </div>
但是,我想实现这一目标:
<div>
<span class="wrapper">Let's say these</span>
<span class="wrapper">are the words</span>
<span class="wrapper">in my div</span>
</div>
每个特定数量的单词(本例:每 3 个单词)将被分成一组,并且每组单词要单独包装。
这些是我首先想到的:
1)我认为可以通过使用text()
获取字符串并split(' ')
形成一个数组来实现,每个元素包含一个单词,编写一个while循环来操作数组:
var a = 0;
var b = array.length;
while (a<b) {
array[a] = "<span class="wrapper>" + array[a]";
a +=2;
if (a>b) {
a = b-1;
}
array[a] = array[a] + "</span>";
a++;
}
然后只需简单地.join('')
将数组组成一个字符串和$("div").html(string)
;
2)或者我可以在获得 with 后简单地使用正则表达式text()
:
对包含的表达式进行全局搜索a word + a space + a word + a space + another word
/(\w+\s+\w+\s+\w+)/g
将其替换为包裹在跨度中
<span>$1</span>
如果有的话,在执行奇数输出html()
之前的输出。$("div").contents().eq(2).wrap('<span class="wrapper"/>')
这些是我想出的,我想知道,除了这些还有更好的方法吗?
实现它的最佳方法是什么(最快且需要最少的内存)?