javascript - 按字符串拆分仅适用于第一个子字符串
问题描述
问题:
我当前的代码仅在它找到的第一个匹配子字符串上拆分。我希望它拆分并向每个匹配的子字符串添加一个跨度标签。这是我的代码:
$('#orderhighlight').each(function() {
console.log($(this).html());
var textclean = $(this).html().replace(/<br ?\/?>/g, ' <br /> ');
$(this).html(textclean);
console.log($(this).html());
var text = $(this).html().replace(/ +(?= )/g,'');
$(this).html(text);
});
$('#rechighlight').each(function() {
console.log($(this).html());
var texttwo = $(this).html().replace(/<br ?\/?>/g, ' <br /> ');
$(this).html(texttwo);
});
var one = $('#orderhighlight').html().split(' ');
var two = $('#rechighlight').html().split(' ');
one.forEach(function(w, i){
var ind2 = two.indexOf(w);
if(two.includes(one[i])){
one[i] = "<span style='color:orange'>" + w + "</span>";
two[ind2] = "<span style='color:orange'>" + w + "</span>";
}
})
$('#orderhighlight').html(one.join(' '));
$('#rechighlight').html(two.join(' '));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p> Ordered </p>
<p id="orderhighlight">006 <br> 007 <br> 008 <br> 009</p>
<br>
<p> Received </p>
<p id="rechighlight">006 <br> 006 <br> 008</p>
运行代码并查看输出。您会注意到接收到的第二个“006”实例正在被跳过。
尝试的解决方案:
我试图改变我if
的while
声明,但我很快意识到我必须做更多的改变。所以我换了我split(' ')
的,split('<br>')
但它只是删除了我的<br>
标签并跳过添加任何跨度。我还检查了单个字符串,它似乎只是在我拆分字符串后结束了它。那么究竟是什么阻止它向每个子字符串添加跨度呢?
解决方案
问题是two
数组中的每一项只能修改一项one
。所以,由于只有一个006
in one
,所以只能006
替换一个 in two
。你几乎已经有了while
循环的想法;它实际上不需要那么多重组。请参阅下面的代码(为了保持一致,我还用include
检查indexOf
是否大于或等于 0 替换了对 的调用,因为值 -1 表示未找到它)。
$('#orderhighlight').each(function() {
var textclean = $(this).html().replace(/<br ?\/?>/g, ' <br /> ');
$(this).html(textclean);
var text = $(this).html().replace(/ +(?= )/g,'');
$(this).html(text);
});
$('#rechighlight').each(function() {
var texttwo = $(this).html().replace(/<br ?\/?>/g, ' <br /> ');
$(this).html(texttwo);
});
var one = $('#orderhighlight').html().split(' ');
var two = $('#rechighlight').html().split(' ');
one.forEach(function(w, i){
var ind2 = two.indexOf(w);
if(ind2 >= 0){
one[i] = "<span style='color:orange'>" + w + "</span>";
while (ind2 >= 0) {
two[ind2] = "<span style='color:orange'>" + w + "</span>";
ind2 = two.indexOf(w);
}
}
})
$('#orderhighlight').html(one.join(' '));
$('#rechighlight').html(two.join(' '));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p> Ordered </p>
<p id="orderhighlight">006 <br> 007 <br> 008 <br> 009</p>
<br>
<p> Received </p>
<p id="rechighlight">006 <br> 006 <br> 008</p>
德鲁的答案适用于这种特定情况,因为数组中只有两个006
',但这种方法适用于任意数量的这些值。
推荐阅读
- python - 从终端使用 python 时 -i 和 -u 有什么区别?
- emulation - 如何在 qemu-system-ppc 中挂载外部磁盘?
- node.js - Nodejs:如何在另一个路由器中使用来自路由器的变量
- flutter - 使用flutter redux,StatefulWidget 是可选的吗?
- php - 在响应中首先排序并显示具有大多数值的数组(php)
- javascript - 将多个过滤器应用于数组javascript
- .net - 添加项目引用时出现 Blazor Webassembly 错误
- google-sheets - 使用 ARRAYFORMULA Google 表格的 TEXTJOIN
- c - 带有 adafruit RGBLCDShield Buttons 奇怪行为的 Arduino
- go - 有条件地停止其他 goroutine