【问题标题】:How do I parse result from diffChars as HTML如何将 diffChars 的结果解析为 HTML
【发布时间】:2020-02-26 15:42:35
【问题描述】:

我需要比较两个包含 HTML 内容的 div 标签的文本。结果应该出现在另一个 div 中。虽然它显示了差异并出现在 div 中,但 HTML 未被解析。

<script src="~/js/diff.js"></script>
<script>

comparetxt('divold', 'divnew', 'divresult');

function comparetxt(dold, dnew, dresult) {
    var oldtxt = document.getElementById(dold);
    var newtxt = document.getElementById(dnew);
    var display = document.getElementById(dresult);

    var strnew = newtxt.innerHTML;
    var strold = oldtxt.innerHTML;

    var color = '',
        span = null;

    var diff = Diff.diffChars(strnew, strold),
        fragment = document.createDocumentFragment();

    diff.forEach(function (part) {
        // green for additions, red for deletions
        // grey for common parts
        color = part.added ? 'green' :
            part.removed ? 'red' : 'black';
        span = document.createElement('span');
        span.style.color = color;
        span.appendChild(document
            .createTextNode(part.value));
        fragment.appendChild(span);
    });

    display.appendChild(fragment);
}

【问题讨论】:

    标签: javascript html compare diff


    【解决方案1】:

    document.createTextNode 转义 html 字符。您可以使用 innerHtml 来解决您的问题。

    编辑:为清楚起见添加了代码

    span.innerHtml = part.value
    

    【讨论】:

    • 谢谢,但如果我替换 span.appendChild(document.createTextNode(part.value));用 span.innerHtml = part.value;我没有结果。我猜是因为它在循环中。
    • 我认为这与 Javascript 引用类型有关,您可能希望在循环本身中声明 span,而不是在外部。 @MayB 编辑:通常,为了避免这种错误和代码混乱,在需要的范围内声明变量,而不是在“全局”级别
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    相关资源
    最近更新 更多