我需要保存网站页面中元素的所有颜色值,并将它们放在数据库中。我以为我会这样做:
首先我要去拾取每个元素的rgb值
$("*").each(function(e){
createColorArray($(this).css('backgroundColor'));
});
然后在函数createColorArray中将所有传递的值存储到数组中
function createColorArray(rgbColor)
{
//Create rgb array
}
最后从我的数组中删除重复的项目
function removeDoupe(ar) {
var temp = {};
for (var i = 0; i < ar.length; i++)
temp[ar[i]] = true;
var r = [];
for (var k in temp)
r.push(k);
return r;
}
现在我的问题是, 如何建议创建阵列?直接在$(&#34; *&#34;)里面,或者在我想的专用函数中?我还需要在新数组中删除重复项#34; clean&#34;除了rgb值,我还会给出原始值的值。 一些示例代码?
答案 0 :(得分:4)
正如我在评论中提到的,为什么不早点检查重复?一个简单的例子:
var colors = [];
$('*').each(function(i, el){
var $element = $(el),
color = $element.css('background-color');
if(!~$.inArray(color, colors))
colors.push(color);
});
console.log(colors);
答案 1 :(得分:2)
执行此操作的最佳方法是在您进行操作时完成所有操作。这是你可能做到的一种方式:
var colors = new Array();
var tempColors = {};
$(".colors").each(function(){
var c = $(this).val();
// check if the color exists without looping
if(typeof tempColors[c] == "undefined"){
// if it doesn't, add it to both variables.
tempColors[c] = true;
colors.push(c);
}
});
这将导致两个变量:一个是您不必循环查找以前是否定义它的对象,一个是您使用标准javascript推送的颜色数组。
如果你没有重复使用它,你不应该把它变成一个专用的功能,但你可以把它变成这样的对象:
var colors = function(){
var self = this;
self.array = new Array();
// this is a dedicated check function so we don't need separate variables.
// returns true if the color exists, false otherwise
self.check = function(color){
for(var i =0; i < self.array.length; i++){
if(self.array[i] === color) return true;
}
return false;
}
self.add = function(color){
// use the check function, if it returns false, the color does not exist yet.
if(!self.check(color)){
self.array.push(c);
}
}
}
然后,您可以使用var colorlist = new colors();
实例化颜色列表,并使用colorlist.add("dd0300")
添加颜色。访问阵列可以通过请求colorlist.array
来完成。