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への割り当てを少しずつ行います。または、最終的にそのinnerHTMLに割り当てることにより、「リスト」に追加される文字列としてHTMLを構築します。

文字列のバージョンは次のとおりです。-

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 に答える