【发布时间】:2011-02-19 20:33:32
【问题描述】:
我正在构建一个需要在 DOM 中添加大量 HTML 的 Web 应用程序(使用原型)。其中大部分是包含具有各种属性的元素的行。
目前我在一个变量中保留了一行空白的 HTML
var blankRow = '<tr><td>'
+'<a href="{LINK}" onclick="someFunc(\'{STRING}\');">{WORD}</a>'
+'</td></tr>';
function insertRow(o) {
newRow = blankRow
.sub('{LINK}',o.link)
.sub('{STRING}',o.string)
.sub('{WORD}',o.word);
$('tbodyElem').insert( newRow );
}
现在这一切都很好,而且很好,但这是最佳做法吗?
当我更新页面上的代码时,我必须更新blankRow中的代码,因此插入的新元素是相同的。当我有 40 行 HTML 进入一个 blankRow 时,它会变得很糟糕,然后我也必须转义它。
有没有更简单的方法?我正在考虑 urlencoding,然后在插入之前对其进行解码,但这仍然意味着空白行和大量转义。
什么意思是 eof 函数 a la PHP et al.
$blankRow = <<<EOF
text
text
EOF;
这意味着没有转义,但它仍然需要一个空白行。
遇到这种情况你会怎么做?
已解决
最终在原型中使用了 DOMBuilder。不需要其他库:
$w('a div p span img table thead td th tr tbody tfoot input').each(function(e) {
window['$' + e] = function() {
return new Element(e, arguments[0]);
}
});
newPart = $div({id: 'partition-4'})
.insert( $p()
.insert('<b>Stuff</b>')
)
.insert( $p({
id: 'a-p'})
.insert('<b>More stuff</b>')
);
$('parentDiv').insert(newPart);
【问题讨论】:
-
你的点击函数总是字符串吗?如果它是一个实际的函数会更好,但不确定这是否是一个选项,你也在使用 jQuery 吗?从你的语法中我不能 100% 确定,但看起来你是。
-
不建议将许多节点一个接一个地插入 DOM。你应该一次完成。尝试先将它们插入容器对象,然后再从对象插入 DOM。
-
不,点击功能只是一个例子,主要是它的数字减少了我需要做的转义量。是的,它是原型,应该采用 jquery 的方式,但现在为时已晚。
-
嘿 vsync 我会先创建容器对象,比如 container = document.createElement('tbody') 把所有的 tr 扔进去然后做一个 $('actualTable').insert(container.childElements( ))?或 .insert( container.innerHTML ) - [iirc insert 想要一个字符串 arg...]
标签: javascript html ajax dom