我一直在尝试在我的一个项目中使用此代码:
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),
附加子代码如下:
diffoutputdiv.appendChild(diffview.buildView({
baseTextLines: base,
newTextLines: newtxt,
//opcodes: opcodes,
baseTextName: "Base Text",
newTextName: "New Text",
contextSize: contextSize,
viewType: viewType
}));
我还添加了
' name="field1" '
到html。完整的源代码可以在这里找到:Pastebin Code
我不断得到的错误是:
Uncaught TypeError: Object #<NodeList> has no method 'appendChild' demo.html:69
diffUsingJS demo.html:69
onclick demo.html:98
返回的数据等效于原始的byID数据集。请帮忙。
最佳答案
在您的代码中:
//diffoutputdiv = byId("diffoutput"),
diffoutputdiv = byName("diffoutput"),
从
byId
转换为byName
时,您忘记从返回的匹配列表中获取元素。同样,getElementsByName
返回节点列表,而getElementById
返回单个节点。diffoutputdiv = byName("diffoutput")[0]
关于javascript - 尝试获取document.getElementsByName(name)时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15056138/