0

我正在研究一个类来创建一个相当复杂的自定义元素。我希望能够在创建元素时定义元素属性(主要是 CSS)。在给定输入数组的情况下,我想出了以下函数来快速为我设置属性:

// Sample array structure of apply_settings
//var _button_div =   {
//    syle    :   {
//        position:   'absolute',
//        padding :   '2px',
//        right   :   0,
//        top     :   0
//    }
//};
function __apply_settings(__el,apply_settings){
    try{
        for(settingKey in apply_settings){
            __setting = apply_settings[settingKey];
            if(typeof(__setting)=='string'){
                __el[settingKey] = __setting;
            }else{
                for(i in __setting){
                    __el[settingKey][i] = apply_settings[settingKey][i];
                } 
            }
        }
    }catch(ex){
        alert(ex + "   " + __el);
    }
}

该功能工作正常,除了这里:

function __draw_top(){
    var containerDiv = document.createElement('div');
    var buttonDiv = document.createElement('div');
    __apply_settings(containerDiv,this.settings.top_bar);
    if(global_settings.show_x)
        buttonDiv.appendChild(__create_img(global_settings.images.close));
    containerDiv.appendChild(buttonDiv);
    __apply_settings(buttonDiv,this.settings.button_div);
    return containerDiv;
}

失败的特定部分__apply_settings(buttonDiv,this.settings.button_div);出现错误“无法设置未定义的属性'位置'”。所以很自然地,我假设 buttonDiv 是未定义的。我alert(ex + " " + __el);输入 __apply_settings() 来验证我正在使用什么。令人惊讶的是,该元素是一个 div。有什么理由为什么这个函数适用于 containerDiv 而不是 buttonDiv?任何帮助将不胜感激 :)

{编辑} http://jsfiddle.net/Us8Zw/2/

4

1 回答 1

1

那是因为你这里有一个错字:

var _button_div =   {
    syle    :   { //<--- here
        position:   'absolute',
        padding :   '2px',
        right   :   0,
        top     :   0
    }
};

如果将其更正为style,则可以正常工作;http://jsfiddle.net/Us8Zw/3/

我还建议您尝试遵循著名的风格指南(而不是看似自己编造的);您的代码目前很难阅读。我推荐的一个是Crockford Style Guide

于 2012-06-12T10:41:37.940 回答