将.css()方法映射到jquery中的数组

时间:2010-02-01 10:29:14

标签: jquery

在我的程序中,我尝试使用.clone()方法复制一个元素,但是这个方法不会复制元素的样式,所以我必须逐个翻译它们:

            var style = {
                "position":"absolute",
                "color": $(demo[i][1]).css("color"),
                "width": $(demo[i][1]).width(),
                "height": $(demo[i][1]).height(),
                "font-size": $(demo[i][1]).css("font-size"),
                "font": $(demo[i][1]).css("font"),
                "text-align": $(demo[i][1]).css("text-align"),
                "padding-left": $(demo[i][1]).css("padding-left"),
                "padding-right": $(demo[i][1]).css("padding-right"),
                "padding-top": $(demo[i][1]).css("padding-top"),
                "padding-bottom": $(demo[i][1]).css("padding-bottom"),
                }

然后使用.css方法来应用这些样式,但是逐个复制这些样式似乎是一个愚蠢的想法。 那么有没有更好的方法复制元素,所以它的样式也被复制,而不是.clone()方法,如果没有,有没有办法自动mapp所有可能的css()结果而不会遇到所有这些麻烦?< / p>


这是我的新方法,还有更好的方法吗?

var styleList = ['background','border','outline','font','list-style','padding','display','float','overflow','visibility',' width','height','border-collapse','border-spacing','caption-side','empty-cells','table-layout','color','direction','letter-spacing' ,'line-height','text-align','text-decoration','text-indent','text-transform','vertical-align','white-space','word-spacing'] < / p>

var style = {'position':'absolute'}

$。each(styleList,function(i,property){   style [property] = original.css(property) });

1 个答案:

答案 0 :(得分:3)

这是一个很好的例子,说明为什么你应该直接使用CSS类而不是样式。

如果将所有内容都放入CSS类中,那么您所要做的就是在克隆元素上调用addClass()方法。我没有对它进行过测试,但是我希望你会发现这个实际上是在克隆元素的时候被复制的,所以你不会发生事件。

回复评论

您的网站应该与代码分开展示。如果您正在努力使用继承的属性,那么您可能需要查看您网站的设计。将所有演示文稿分成CSS是一种很好的做法。

另外,要检查元素是否有类,请使用hasClass()函数。没有必要拆分属性然后迭代数组,所以,

var classList = $('#divId').attr('class').split(' '); 
$.each( classList, function(index, item){ 
    if (item==='someClass') { //do something } 
}); 

变为:

if ($('#divId').hasClass('someClass')){
    //do something
}