mergeAttributesによるnameプロパティの設定

1697 ワード

国外のブログで見た技巧、ついにIEのこの古い大難の問題を解決します.私もIEのsetAttribute bugでその解決方法について言及しました.一つはinnerHTML、一つはIE特別なcreatElementの使用方法ですが、DOMを生成するときにname属性を一緒に解決するように要求されています.このようなDOM生成後にname属性を修正する方法は本当に上手ですね.
mergeAttributesの方法を紹介します.2つのパラメータoSourceとbPreserveがあります.
mergeAttributes
oSource
IE5.0必須です.オブジェクト(Element).属性をobjectにコピーするオブジェクトを指定します.
bPreserve
IE5.5オプション.ブール値(Boolean).false:ターゲットオブジェクトのアイデンティティ属性(id,name)は保護されません.true:デフォルトです.ターゲットオブジェクトobjectのアイデンティティ属性を保護します.
mergeAttributesメソッドは、カスタム属性を含むoSourceオブジェクトのすべての属性を、その上に添付されたイベントとスタイルをコピーすることができます.IE 5では.0以降のバージョンでは、読み取り専用プロパティはコピーされません.id属性のようです.IE 5.5+では、bPreserveパラメータ値をfalseに設定することで、idプロパティとnameプロパティを含む、oSourceのすべてのプロパティをこのメソッドを呼び出すオブジェクトにコピーできます.
 
// input name inputObject 。
inputObject.mergeAttributes(document.createElement("<input name='nasami' />"))

次は完全なプロパティ設定のシナリオです.
 
      var setAttribute = function(obj,attrName,attrValue){
        if("!+\v1" && attrName === "name"){
          obj.mergeAttributes(document.createElement("<input name='" + attrValue + "'/>"), false);
        }else{
          if(obj.setAttribute){
            obj.setAttribute(attrName,attrValue);
          }else{
            obj[attrName] = attrValue;
          }   
        }         
      }