Javascript,DOM疯狂......

时间:2011-07-30 22:37:25

标签: javascript dom

首先,请原谅我,因为我对此有点新,所以我的代码看起来不太漂亮......但是下面的所有内容都有效, ##这不是一个寻求非工作代码帮助的主题## 即可。
现在已经不在了......这就是事情:我已经为FF制作了一个插件,但是插件编辑告诉我它会被拒绝,因为我使用的是innerHTML ...所以要使用appendChild等来改变它,那就是什么我在下面做了。

问题是,它看起来很丑陋,感觉非常复杂,所以我想知道我是否使用了正确的方法,还是有更简单的方法来做这件事?

var the_table_color,alt_link,link_for_deletion,comment =null;


    var xmlDoc=null;
    var parser = new DOMParser();
    xmlDoc = parser.parseFromString(data, "text/xml");


var nodes = xmlDoc.getElementsByTagName("unblocker_details");  
var t  = document.createElement("table"),
    td = document.createElement("td"),
    tr = document.createElement("tr");
var a       = document.createElement("a"),
    strong  = document.createElement("strong");

    t.style.width = "80%"; // Table attributes
    t.style.border="0";
    t.cellspacing="2";
    t.cellpadding="2";

for(var i=0; i< nodes.length; i++) {
  the_table_color    = nodes[i].getAttribute("table_color");
  var the_type       = nodes[i].getAttribute("type");
  alt_link           = nodes[i].getAttribute("alt_link");
  link_for_deletion  = nodes[i].getAttribute("link_for_deletion");
  comment            = nodes[i].getAttribute("comment");


    // TR1, TD1
    td="";  td = document.createElement("td");
    tr=""; tr = document.createElement("tr");

    tr.bgColor=the_table_color;
    t.appendChild(tr);

    td.width="16%";
    td.vAlign="top";
    tr.appendChild(td);

    strong="";
    strong  = document.createElement("strong");
    strong.appendChild(document.createTextNode(the_type));
    td.appendChild(strong);

    td.width="16%";
    td.vAlign="top";
    tr.appendChild(td);

            //TD2
            td="";  td = document.createElement("td");
            td.width="70%";
            td.vAlign="top";

            a="";a = document.createElement("a");
            a.href= alt_link;
            a.appendChild(document.createTextNode(alt_link));
            a.target=   "_blank";
            td.appendChild(a);
        tr.appendChild(td);

                    //TD3
                    td="";  td = document.createElement("td");
                    td.noWrap="NOWRAP";
                    td.align="center";
                    td.vAlign="middle";
                    td.width="14%";

                    a="";a = document.createElement("a");
                    a.href= "javascript:dead_link('"+link_for_deletion+"')";
                    a.appendChild(document.createTextNode("Dead link?"));
                    td.appendChild(a);
                tr.appendChild(td);
                t.appendChild(tr);

                            // TR2, TD1 (or TD4 in total)
                            tr="";  tr = document.createElement("tr");
                            tr.bgColor=the_table_color;


                            td="";  td = document.createElement("td");
                            td.vAlign="top";
                            td.appendChild(document.createTextNode("Comment:"));
                            tr.appendChild(td);

                            td="";  td = document.createElement("td");
                            td.colSpan="2";
                            td.appendChild(document.createTextNode(comment));
                        tr.appendChild(td);
                        t.appendChild(tr);
}// End of for() loop
//alert(t.innerHTML);


    document.getElementById("wait").textContent="";
    document.getElementById("wait").appendChild (t);

3 个答案:

答案 0 :(得分:3)

如果您不想使用巨型库来执行简单的操作,您可以简单地为函数添加别名:

// aliasing
var el = document.createElement;

// not really aliasing, but I didn't want to modify the prototypes of html elements
function attr(el, attr, value) {
    el.setAttribute(attr, value);
}

将代码更改为如下所示:

var td = el('td');
attr(td, 'width', '100%');

虽然使用jQuery,但这看起来像这样:

var td = $('<td>');
td.attr('width', '100%');

虽然我经常吝啬并且为jQuery写一个包装器(特别是对于div),它们看起来像这样:

function div(className) {
    if(className) {
        return $('<div>', {'class': className});
    }
    return $('<div>');
}

答案 1 :(得分:0)

我看到的丑陋的事情是不使用setAttribute()

设置属性

如果您想要一种片段,可以在不使用innerHTML的情况下完成,您已经在代码中使用了所需的方法。

一步创建表的简单示例:

var table = parser.parseFromString('<table>'+
                                   '<tr><td>table created without innerHTML</td></tr>'+
                                   '</table>', 
                                   'text/xml').documentElement;

答案 2 :(得分:-1)

JQuery是一个轻量级的库,可以完成您希望在其中执行的所有操作,并且可以保证跨浏览器的兼容性。