我正在构建一个web应用程序(使用prototype),它需要将大量的HTML添加到DOM中。其中大多数是包含具有各种属性的元素的行。
目前,我在一个变量中保留了一个空白的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中的代码,所以插入的新元素是相同的。当我在一个blankRow中有40行超文本标记语言时,它变得很糟糕,然后我也不得不转义它。
有没有更简单的方法?我在考虑对blankRow进行编码,然后在插入之前对其进行解码,但这仍然意味着but和大量转义。
这意味着什么将是一个类似PHP等人的eof函数。
$blankRow = <<<EOF
text
text
EOF;
这将意味着无法转义,但它仍然需要一个blankRow。
在这种情况下你会怎么做?
已解决
最终在prototype中使用了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);
发布于 2010-05-15 19:21:18
如果我理解得很好,您的问题是关于初始化大型字符串的方式,就像在PHP (或Perl )中那样?对于我使用的长(多行)字符串:
var blankRow = [
'a line',
'another line',
'still more lines',
'lines lines lines',
'... etc'
].join('')
你也可以使用反斜杠来继续,但这可能会变得有点混乱:
var blankRow = 'a line\
another line\
still more lines\
lines lines lines\
... etc';
基于评论进行编辑:我也很懒!所以我用这个来进行转义:
function qs(str){
str = str || this || '';
return "'"+str+"'";
}
function qd(str){
str = str || this || '';
return '"'+str+'"';
}
String.prototype.qs = qs;
String.prototype.qd = qd;
// applied:
var blankRow = [
'a line',
'another '+qd('line'),
'still more lines',
'lines '+'lines'.qs()+ ' lines',
'... etc'
].join('');
懒惰的问题:坚持一个人的懒惰是相当困难的工作
https://stackoverflow.com/questions/2839844
复制相似问题