1

由于某种原因,这不起作用?我想ul#list用一些项目填充,但它不起作用。

var list = "";
for (var i = 0 ; i<=history.length; i++) {
    list += "<li onclick=\"copyShortURL('"+history[i].shortURL+"');\"><div class=\"short\">"+history[i].shortURL+"</div><div class=\"long\">"+history[i].longURL+"</div></li>";
}
document.getElementById('list').innerHTML = list;

谁能告诉我出了什么问题:(我的意思是它没有做任何事情,没有列表项被放入列表中?

PS这仅适用于mobilesafari :)

4

3 回答 3

1

createElement方法采用document单个字符串作为您要创建的元素名称。然后,您可以使用 DOM 方法和属性来分配点击处理程序,然后使用 innerHTML 或 DOM 方法来创建内部元素。

您的循环中还有一个错误:您需要在检查数组的<长度时使用。<=history

var ele, div, list = document.getElementById("list");

var createClickHandler = function(url) {
    return function() {
        copyShortURL(url);
    };
}

for (var i = 0, len = history.length; i < len; ++i)
     {
     ele = document.createElement("li");
     ele.onclick = createClickHandler(history[i].shortURL);

     div = ele.appendChild( document.createElement("div") );
     div.className = "short";
     div.appendChild( document.createTextNode(history[i].shortURL) );

     div = ele.appendChild( document.createElement("div") );
     div.className = "long";
     div.appendChild( document.createTextNode(history[i].longURL) );

     list.appendChild(ele);
     }
于 2010-01-01T12:37:19.367 回答
0

我会使用 DOM 来附加孩子,然后将类名和事件处理程序添加到这些孩子。

这是我使用的多浏览器功能

function addEventHandler(obj,eventName,handler){
    if (document.addEventListener){
        obj.addEventListener(eventName,handler,false);
    } else if (document.attachEvent){
        obj.attachEvent("on"+eventName,handler);


    } 
}
creat an array for tyhe bew elementsa and divs;
var elements = new Array();
var newDivsShort = new Array();
var newDivsLong = new Array();

then in your for loop you can,

for (var i = 0 ; i<=history.length; i++)   
{   
 newDivsShort[i] = document.createElement('div');
 newDivsLong[i] = document.createElement('div');

 elements[i] = document.createElement('li');
newDivsShort[i].className = "short";
newDivsLong[i].className = "long";

elements[i].appendChild(newDivsShort[i]);
elements[i].appendChild(newDivsLong[i]);
addEventHandler(elements[i],click,copyShortURL(history[i].shortURL));

}

您可能必须使用类似于 timeOUT 函数的格式来传递参数。

于 2010-01-01T13:01:56.987 回答
-1

createElement 方法仅采用元素名称,例如。 document.createElement("li")

因此,您可以使用一系列 createElements 和 appendChilds 在代码中构建 DOM,并对 innerHTML 进行少量分配。或者,您将 HTML 构建为要附加到“列表”的字符串,方法是最终分配给它的 innerHTML。

这是字符串版本:-

var asHTML = [];
for (var i = 0 ; i<=history.length; i++) 
{ 
  asHTML.push("<li onclick=\"copyShortURL('"+history[i].shortURL+"');\"><div class=\"short\">"+history[i].shortURL+"</div><div class=\"long\">"+history[i].longURL+"</div></li>"); 
  document.getElementById("list").innerHTML += asHTML.join("\n");
} 
于 2010-01-01T12:31:26.743 回答