我想做的事
我想输出JAN17
,FEB18
,MAR19
但输出JAN19
,FEB17
,MAR18
你能帮助我,告诉我它为什么会发生吗?
$('.policyCopyBtn').click(function() {
var leftContent = $(".leftPart").html().replace("16</dateto>", "17</dateto>").replace("17</dateto>", "18</dateto>").replace("18</dateto>", "19</dateto>");
var leftContent2 = $(leftContent).text();
$('.rightPart textarea').val(leftContent2);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script>
<div class="leftPart">
<pre>
<DateTo> Some text here JAN16</DateTo>
<DateTo> Some text here FEB17</DateTo>
<DateTo> Some text here MAR18</DateTo>
<DateTo> Some text here JAN16</DateTo>
<DateTo> Some text here FEB17</DateTo>
<DateTo> Some text here MAR18</DateTo>
</pre></div>
<div class="rightPart">
<textarea class="policyDetails"></textarea>
</div>
<input type="submit" class="policyCopyBtn" />
&#13;
答案 0 :(得分:3)
这是因为您正在链接.replace
操作,以便他们替换自己的结果。
最简单的选择是颠倒替换操作的顺序。
或者,您可以将它们全部合并为一个操作,并使用带有capture replacement function的正则表达式。
$('.policyCopyBtn').click(function() {
var leftContent = $(".leftPart").html().replace(/(16|17|18)\<\/dateto\>/g,
function (match, capture) {
return (Number(capture) + 1) + "</dateto>";
}
);
var leftContent2 = $(leftContent).text();
$('.rightPart textarea').val(leftContent2);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="leftPart">
<pre>
<DateTo> Some text here JAN16</DateTo>
<DateTo> Some text here FEB17</DateTo>
<DateTo> Some text here MAR18</DateTo>
</pre></div>
<div class="rightPart">
<textarea class="policyDetails"></textarea>
</div>
<input type="submit" class="policyCopyBtn" />
&#13;
答案 1 :(得分:1)
这是更新的小提琴。
<div class="leftPart">
<pre>
<DateTo> Some text here JAN16</DateTo>
<DateTo> Some text here FEB17</DateTo>
<DateTo> Some text here MAR18</DateTo>
</pre></div>
<div class="rightPart">
<textarea class="policyDetails"></textarea>
</div>
<input type="submit" class="policyCopyBtn" />
$('.policyCopyBtn').click(function() {
var leftContent = $(".leftPart").html().replace("18</dateto>", "19</dateto>").replace("17</dateto>", "18</dateto>").replace("16</dateto>", "17</dateto>");
var leftContent2 = $(leftContent).text();
$('.rightPart textarea').val(leftContent2);
});
答案 2 :(得分:1)
您可以使用replace()
回调并一次性替换所有内容
$('.policyCopyBtn').click(function() {
var left = $(".leftPart").html().replace(/(16|17|18|19)\<\/dateto\>/g, function(r) {
return ((+r.replace(/\D+/g,'')) + 1) + '</dateto>';
});
var left2 = $(left).text();
$('.rightPart textarea').val(left2);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script>
<div class="leftPart">
<pre>
<DateTo> Some text here JAN16</DateTo>
<DateTo> Some text here FEB17</DateTo>
<DateTo> Some text here MAR18</DateTo>
</pre></div>
<div class="rightPart">
<textarea class="policyDetails"></textarea>
</div>
<input type="submit" class="policyCopyBtn" />
如果你想只增加任何日期,那就是
.replace(/(\d+)\<\/dateto\>/g, ...