javascript - Javascript Diff算法不适用于HTML代码
问题描述
我正在尝试使用Javascript Diff 算法将文本字符串输入与段落进行比较。这是我的代码。
HTML
<p id="db_structure"><div class="myparent">
<div>
<div class="pdp-product-price test" id="lll">
<span>650 rupees</span>
<div class="origin-block">
<span>1,500 rupees</span>
<span>-57%</span>
</div>
</div>
</div>
</div></p>
<textarea name="new_structure" width="100"></textarea>
<button id="compare">Compare</button></body>
这是我的 js 代码。
$(function () {
$.fn.diffString = function (txt) {
return this.each(function () {
$(this).html(diffString($(this).text(), txt));
});
};
$('#compare').click(function () {
var newstr = $("textarea[name=new_structure]").val();
$('#db_structure').diffString(newstr);
});
});
但如果我输入,<div class="myparent"> <div> <div class="pdp-product-price test" id="lll"> <span>650 rupees</span>
它会显示,
650 卢比
<div class="origin-block"> <span>1,500 rupees</span> <span>-57%</span> </div> </div> </div> </div>
但正确的输出应该是
<div class="myparent"> <div> <div class="pdp-product-price test" id="lll"> <span>650 rupees</span>
<div class="origin-block"> <span>1,500 rupees</span> <span>-57%</span> </div> </div> </div> </div>
我做错什么了吗?
我在 $.fn.diffString 中记录了diffString ( $(this).text(), txt)。
代码,
$.fn.diffString = function(txt){
return this.each(function(){
console.log(diffString($(this).text(), txt));
$(this).html(diffString($(this).text(),txt));
});
};
输出,
<div class="myparent"> <div> <div class="pdp-product-price test" id="lll"> <span>650 rupees</span>
<del><div </del><del>class="origin-block">
</del><del><span>1,500 </del><del>rupees</span>
</del><del><span>-57%</span>
</del><del></div>
</del><del></div>
</del><del></div>
</del><del></div>
</del>
解决方案
最后我找到了另一种方法。不幸的是,它包括更改插件。我从这个jsfiddle找到了这段代码。在插件代码中,我们必须更改,
在diffString()函数内部,
改变,
str += " " + out.n[i].text + nSpace[i] + pre;
到,
str += " " + escape(out.n[i].text) + nSpace[i] + pre;
希望别人会发现它有用
推荐阅读
- javascript - 如何使用javascript或react删除上传到s3的文件?
- matlab - matlab表面图中的刻度线
- javascript - 在表单上发布请求并进行验证
- sql - 优化动态选择表或其他的视图
- fetch - react, fetch, multer 上传时损坏的文件
- javascript - 对象值循环
- typescript - 使用 NuxtJS 和 vuex-module-decorators 的动态 vuex 存储模块
- google-bigquery - 如何从 BigQuery 表的一个分区中获取一些数据并插入到下一个分区?
- r - 如何在 R 中复制向量
- ios - 删除数据线 iOS 图表上方的值