Javascript 如何使用DOM在不使用.innerHTML的情况下设置HTML表中的值?
我最近在CodeReviewStackExchange上发布了一些代码 我的代码将用JavaScript中对象的值填充HTML表 在我收到的答复中,有人建议我使用DOM向表中添加行,而不使用.innerHTML或jQuery。我很想这么做,但我不知道怎么做 我的代码如下所示:Javascript 如何使用DOM在不使用.innerHTML的情况下设置HTML表中的值?,javascript,dom,Javascript,Dom,我最近在CodeReviewStackExchange上发布了一些代码 我的代码将用JavaScript中对象的值填充HTML表 在我收到的答复中,有人建议我使用DOM向表中添加行,而不使用.innerHTML或jQuery。我很想这么做,但我不知道怎么做 我的代码如下所示: var html = ... // code to get html $(tbody).html(html); 如何在不使用innerHTML或jQuery的情况下将变量html中的行放入我的表体。如果您有一个html
var html = ... // code to get html
$(tbody).html(html);
如何在不使用innerHTML或jQuery的情况下将变量
html
中的行放入我的表体。如果您有一个html字符串,您不希望自己像Inerdial在注释中指出的那样解析它。。让浏览器使用innerHTML/jQuery为您解析它
我将向您展示如何进行普通DOM操作:
var thediv = document.createElement('DIV');
thediv.style.backgroundColor = 'white';
thediv.appendChild(document.createTextNode('some text'));
document.getElementById('someElement').appendChild(thediv);
这是最基本的,您可以创建表和表行,并以这种方式插入它们
为什么不使用jQuery或innerHTML是另一个问题
编辑:向div添加了一些文本
谢谢如果你有一个HTML字符串,你不想像Ineradial在评论中指出的那样自己解析它。。让浏览器使用innerHTML/jQuery为您解析它 我将向您展示如何进行普通DOM操作:
var thediv = document.createElement('DIV');
thediv.style.backgroundColor = 'white';
thediv.appendChild(document.createTextNode('some text'));
document.getElementById('someElement').appendChild(thediv);
这是最基本的,您可以创建表和表行,并以这种方式插入它们
为什么不使用jQuery或innerHTML是另一个问题
编辑:向div添加了一些文本
谢谢如果您使用您正在尝试的方法,似乎:
var html = '<tr><td>This is a div</td></tr>';
$(tbody).html(html);
当然,这会将一个空的td
附加到tr
并将其附加到tbody
。要在单元格中放置内容,您仍然必须使用innerHTML
:
var cell = document.createElement('td');
cell.innerHTML = "This is text inside of the created 'td' DOM node.";
var row = document.createElement('tr');
var tbody = document.getElementsByTagName('tbody')[0];
row.appendChild(cell);
tbody.appendChild(row);
使用jQuery,可以将其压缩为:
var cell = $('<td />').text("This is text inside of the created 'td' DOM node.");
var row = $('<tr />');
var tbody = $('tbody:first');
row.append(cell).appendTo(tbody);
var cell=$('').text(“这是创建的'td'DOM节点内的文本。”);
变量行=$('');
var tbody=$('tbody:first');
行.append(单元格).appendTo(tbody);
一个链接,指向各种方法的比较(“香草”JavaScript与jQuery),。如果您使用您正在尝试的方法:
var html = '<tr><td>This is a div</td></tr>';
$(tbody).html(html);
当然,这会将一个空的td
附加到tr
并将其附加到tbody
。要在单元格中放置内容,您仍然必须使用innerHTML
:
var cell = document.createElement('td');
cell.innerHTML = "This is text inside of the created 'td' DOM node.";
var row = document.createElement('tr');
var tbody = document.getElementsByTagName('tbody')[0];
row.appendChild(cell);
tbody.appendChild(row);
使用jQuery,可以将其压缩为:
var cell = $('<td />').text("This is text inside of the created 'td' DOM node.");
var row = $('<tr />');
var tbody = $('tbody:first');
row.append(cell).appendTo(tbody);
var cell=$('').text(“这是创建的'td'DOM节点内的文本。”);
变量行=$('');
var tbody=$('tbody:first');
行.append(单元格).appendTo(tbody);
一个链接,用于比较各种方法(“香草”JavaScript与jQuery),我认为建议您在将文本字符串内容放置到元素中(既可以是预先存在的,也可以是动态创建的)时使用
.innerText
而不是.innerHTML
。这样做更安全。原因是:如果在检索内容的过程中,您得到一个字符串,其中包含类似“//do some bad
”的内容,那么当使用.innerHTML
将该潜在危险的脚本附加到DOM时,将执行该脚本。但是,如果使用.innerText
,它将作为字符串放置在DOM中,而不是作为要运行的脚本进行计算 我认为建议可能是在将文本字符串内容放置到元素中(既可以是预先存在的,也可以是动态创建的)时使用.innerText
而不是.innerHTML
。这样做更安全。原因是:如果在检索内容的过程中,您得到一个字符串,其中包含类似“//do some bad
”的内容,那么当使用.innerHTML
将该潜在危险的脚本附加到DOM时,将执行该脚本。但是,如果使用.innerText
,它将作为字符串放置在DOM中,而不是作为要运行的脚本进行计算 “获取HTML的代码”很重要。DOM操作的要点是,您不需要预先构建一个大的HTML字符串,而是逐个添加几个较小的元素(如行)。如果你因为其他原因不得不提前构建一个大的HTML字符串,那么再拆分它就没有意义了,“获取HTML的代码”是很重要的。DOM操作的要点是,您不需要预先构建一个大的HTML字符串,而是逐个添加几个较小的元素(如行)。如果出于其他原因,您必须提前构建一个大的HTML字符串,那么再次拆分它是没有意义的。我已经编写了与您描述的类似的代码,它基本上是有效的,但有一个问题。当我编写cell.setAttribute('class','evenRow')
时,类对行的应用似乎没有反映在我的文档中。请改用:cell.className=“evenRow”代码>如果没有看到您的代码,我无法解释代码不起作用的原因。我编写了与您描述的代码类似的代码,并且大多数代码都能起作用,但有一个问题。当我编写cell.setAttribute('class','evenRow')
时,类对行的应用似乎没有反映在我的文档中。请改用:cell.className=“evenRow”代码>如果没有看到您的代码,我无法提供有关代码不工作原因的见解。