0

我一直在尝试在我的一个项目中使用此代码:

https://github.com/cemerick/jsdifflib

编辑:链接到有问题的代码http://jsfiddle.net/BvFNf/3/

当前形式的代码使用:

var byId = function (id) { return document.getElementById(id); }
    base = difflib.stringAsLines(byId("baseText").value),
    newtxt = difflib.stringAsLines(byId("newText").value),

但是我正在尝试使用名称字段:

var byName = function (name) { return document.getElementsByName(name); }
    base = difflib.stringAsLines(byName("field1")[0].value),
    newtxt = difflib.stringAsLines(byName("field2")[0].value),

append子代码如下:

        diffoutputdiv.appendChild(diffview.buildView({
            baseTextLines: base,
            newTextLines: newtxt,
            //opcodes: opcodes,
            baseTextName: "Base Text",
            newTextName: "New Text",
            contextSize: contextSize,
            viewType: viewType
    }));

我还添加' name="field1" '到 html。

完整的源代码可以在这里找到:Pastebin 代码 我不断收到的错误是:

Uncaught TypeError: Object #<NodeList> has no method 'appendChild' demo.html:69
diffUsingJS demo.html:69
onclick demo.html:98

返回的数据相当于原始的 byID 数据集。请帮忙。

4

1 回答 1

4

在您的代码中:

//diffoutputdiv = byId("diffoutput"),
diffoutputdiv = byName("diffoutput"),

在从byId到您的转换中,byName您忘记从返回的匹配列表中获取元素。同样,getElementsByName返回节点列表,并getElementById返回单个节点。

diffoutputdiv = byName("diffoutput")[0]
于 2013-02-24T20:25:19.957 回答