0

疑似コードとフォーマットについてはご容赦ください。頭の中でコードを思い出すことはできません。

IE9 以下では setAttribute() メソッドを使用してプロパティと属性を設定できることは知っていましたが、IE10 では属性とプロパティを別々に分離することで変更されたようです。

のようなことをしても

element.setAttribute("className", "myClass");

として表示されるように要素を設定します

<tag className = "myClass" />

プロパティを設定することすらありません。

私のコードには、属性/プロパティの名前と値を格納するために使用する JSON リストがあります。これは、setAttribute(); で設定するだけです。

createElement(tag, list)
{
    //pseudocode
    var element = createElementWithTag(tag);
    for each(attr in attributes)
       if (attributes.hasOwnKey(attr))
           element.setAttribute(attr, attributes[attr]);
}

これは IE7-9 では問題なく動作しましたが、IE10 では完全に失敗します。

どのタイプ (attr または prop) でなくてもプロパティと属性を設定できる方法はありますか?

変更したいプロパティのケースをハードコーディングせずに、プロパティを動的に設定する方法さえ考えられません。

解決策もおそらく役立つでしょう。

4

1 に答える 1

1

私はこのようなものがあなたが望むものだと思います:

function tag(tag, attribs) {
    if(tag.charAt) tag = document.createElement(tag);
    var alias = {
        htmlFor: "for",
        className: "class"
    }, prop;
    for (prop in attribs) if (attribs.hasOwnProperty(prop)) {
        if("style" == prop) tag.style.cssText = attribs[prop];
        try {
            tag[prop] = attribs[prop];
        } catch (h) {
            tag.setAttribute( alias[prop] || prop, attribs[prop]);
        }
    }
    return tag;
}


//test it:
tag("a", {href:"/", target:"_blank", innerHTML:" some text ", className: "1 2 3"}).outerHTML 

IE8 および Chrome でテスト済み。

誰かが dom->attrib マッピング (htmlFor など) をもっと知っている場合は、それらを回答に編集してください。

于 2013-10-11T06:43:43.147 に答える