jQuery动态创建table / tr / td等,并追加属性
在一个例子中我有这个结构(小例子):
在jQuery中,我会动态创建它:
var test = "" + ""....
等等…(很多其他的东西要写)。 之后我会追加它:
$(".somePlaceInHtml").append(test);
那么还有其他方法用jQuery动态编写这样的结构吗? 这对我来说是一个问题,因为我的结构很大,不像我在示例中所示的那么小。 主要原因是我想为自己和维护此代码的其他开发人员提供更好的可读性。
你能用字符串制作一个“模板”吗? 如果是,则将其存储在“常量”变量中(例如,在全局范围中定义),包含实际变量的占位符,如{0}
, {1}
等,就像在C#的string.format()
方法中使用它一样。
所以,你会得到这样的代码:
var rowTemplate = "{0} | SomePredefinedText {1} |
"; var alternateRowTemplate = "{0} | SomewhatDifferent {1} |
"; ...... somewhere deep in your code $("#someElement").append( rowTemplate.format("myvalue1", "myvalue2") ).append( alternateRowTemplate.format("myvalue3", "myvalue4") );
然后根据这个答案使用string.format实现: jQuery中String.format的等价物
这是一个简化的例子:
$(function() { var tbl = $('').attr({ id: "bob" }); var row = $('
').attr({ class: ["class1", "class2", "class3"].join(' ') }).appendTo(tbl); $(' | ').text("text1").appendTo(row); $(' | ').text("Test22").prepend($('').attr({ href: "#" }).text("LINK")).appendTo(row); tbl.appendTo($(".somePlaceInHtml")); });
将行部分包裹在一个循环中,替换为变量,在我看来它至少更容易维护/读取,但我习惯了jQuery,所以你的里程可能会有所不同,只是一个选项。
请注意,由于这是在任何地方使用.text()
,它还有助于防止输出中的跨站点脚本攻击。
你可以创建一个StringBuilder,就像C#中的一样。 这是Telerik Extensions for ASP.NET MVC的一个片段:
$.stringBuilder = function() { this.buffer = []; }; $.stringBuilder.prototype = { cat: function(what) { this.buffer.push(what); return this; }, string: function() { return this.buffer.join(''); } };
这样,您可以拥有以下代码:
var html = new $.stringBuilder(); for (var i in data) html.cat("").cat(i).cat(" | |
"); $('#element').append(html.string());
这种方法的好处是你可以快速连接(数组连接在IE6下表现更好),你可以用其他有用的函数扩展对象(比如, catIf
采用布尔表达式,或rep
重复给定的字符串几个次)。
或者你可以代替将字符串连接在一起,以便使用array.join函数。
for(var i=0;i" + sth + "
"; } node.innerHTML = arr.join('');
window.onload = function(){ var btn = document.createElement("button"); btn.setAttribute("id", "submit_bttn"); btn.style.width = 125 + "px"; btn.style.height = 50 + "px"; btn.innerHTML = "Submit"; document.body.appendChild(btn); var x = document.getElementById("submit_bttn"); x.onclick = function(){ alert("hi"); } }