繁体   English   中英

jQuery动态创建table / tr / td或etc并追加属性

[英]jQuery dynamically create table/tr/td or etc and append attributes

在一个例子中我有这个结构(小例子):

<table id=example>
<tr class="blah test example"><td>Test1</td><td><a href="url">LINK</a>Test11</td></tr>
<tr class="blah test example"><td>Test2</td><td><a href="url">LINK</a>Test22</td></tr>
<tr class="blah test example"><td>Test3</td><td><a href="url">LINK</a>Test33</td></tr>
</table>

在jQuery中我会动态创建它:

var test = "<table id=" + someIDVar + ">"
           + "<tr class=" + classOneVar 
+ classTwoVar + classThreeVar + ">"....

等等...(很多其他的东西要写)。 之后我会追加它:

$(".somePlaceInHtml").append(test);

那么有没有其他方法用jQuery动态编写这样的结构? 这对我来说是个问题,因为我的结构很大,不像我在示例中所示的那么小。 主要原因是我想为自己和维护此代码的其他开发人员提供更好的可读性。

这是一个简化的例子:

  $(function() {
    var tbl = $('<table></table>').attr({ id: "bob" });
    var row = $('<tr></tr>').attr({ class: ["class1", "class2", "class3"].join(' ') }).appendTo(tbl);
    $('<td></td>').text("text1").appendTo(row);
    $('<td></td>').text("Test22").prepend($('<a></a>').attr({ href: "#" }).text("LINK")).appendTo(row);        
    tbl.appendTo($(".somePlaceInHtml"));        
  });

将行部分包裹在一个循环中,用变量替换它在我看来至少更容易维护/读取,但我习惯了jQuery,所以你的里程可能会有所不同,只是一个选项。

请注意,由于这是在任何地方使用.text() ,它还有助于防止输出中的跨站点脚本攻击。

你能用字符串制作一个“模板”吗? 如果是,则将其存储在“常量”变量中(例如,在全局范围中定义),包含实际变量的占位符,如{0}{1}等,就像在C#的string.format()方法中使用它一样。

所以,你会得到这样的代码:

var rowTemplate = "<tr><td>{0}</td><td>SomePredefinedText {1}</td></tr>";
var alternateRowTemplate = "<tr><td class='a'>{0}</td><td>SomewhatDifferent {1}</td></tr>";
 ...... somewhere deep in your code
 $("#someElement").append(
        rowTemplate.format("myvalue1", "myvalue2")
       ).append(
        alternateRowTemplate.format("myvalue3", "myvalue4")
       );

然后,您将根据以下答案使用string.format实现: jQuery中String.format的等效项

您可以创建一个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("<tr><td>").cat(i).cat("</td><td></tr>");

$('#element').append(html.string());

这种方法的好处是你可以快速连接(数组连接在IE6下表现更好),你可以用其他有用的函数扩展对象(例如, catIf采用布尔表达式,或rep重复给定的字符串几个次)。

或者您可以代替将字符串连接在一起,以便使用array.join函数。

    for(var i=0;i<arr.length;i++)
    {
      arr[i] = "<tr>" + sth + "</tr>";       
    }

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");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM