Jquery.each()忽略多个命令

时间:2013-11-02 20:28:11

标签: jquery each

假设我有50个div与ID

<div id="div1"></div>
<div id="div2"></div>
<div id="div3"></div>
<div id="div4"></div>    and ... upto     <div id="div50"></div>

这些div是具有足够宽度x高度的框,以填充背景颜色。

还有另一个div将数据库数据检索为字符串。正在进行regex以匹配div ID并适合jQuery选择器

<div id="bookcaldatesci"></div>

上面div中的字符串(innerHTML)声明了一组div。所以字符串(innerHTML)可能如下所示:

#div1,#div2,#div3,#div1

如果div被多次引用,我想更改div的颜色。所以div1的颜色会改变。

问题是jquery.each()忽略每个()

上的第二个div1

我目前的代码是

$(bookcaldatesci.innerHTML).each(function(i){
    var indicator1 = $(this).css('background-color');
    if (indicator1 == 'rgb(0, 0, 255)') {
        $(this).css({ 'background-color': 'rgb(255, 165, 0)' });
    }
    else if (indicator1 != 'rgb(255, 165, 0)') {
        $(this).css({ 'background-color': 'rgb(0, 0, 255)';
    }
});

总之,如果div1已经是蓝色,请将其设为橙色警告。如果它不是蓝色,则将其变为蓝色。

我确定了问题 - 我设法为.each()的结果返回一个字符串然后理解第二个div1在经过时会丢失.each()我正在寻找避免这种情况的方法。所以jQuery忽略了我的第二个#div1,他将.each()命令作为

运行
#div1,#div2,#div3

删除最后一个div1。这是我通过.each()测试时返回的字符串。

我有什么办法可以不放弃最后一个div1吗?

编辑 - 问题:第一次迭代运行,为什么要运行第二次迭代?

答案:如果存在,我也需要它来运行第二次迭代。因此,如果有第二次迭代,我需要它来改变颜色(所以它警告我)。该字符串来自自动化的数据库,涉及预订。如果存在重叠,则应警告管理员。我使用正则表达式构建了字符串,因此字符串与id的列表相同,所以我可以在jQuery选择器中获取它。

3 个答案:

答案 0 :(得分:0)

通过不同的方法(Javascript)回答

function find_duplicates(arr) {
var len=arr.length,
  out=[],
  counts={};

for (var i=0;i<len;i++) {
var item = arr[i];
var count = counts[item];
counts[item] = counts[item] >= 1 ? counts[item] + 1 : 1;
}

for (var item in counts) {
if(counts[item] > 1)
  out.push(item);
}

alert(out);
}

find_duplicates(bookcaldatesci.innerHTML.split(","));

将警报发送到jQuery选择器,可以获得所需的结果。

答案 1 :(得分:0)

乍一看,你看起来有一个错字:

$(bookcaldatesci.innerHTML).each(function(i){
    var indicator1 = $(this).css('background-color');
    if (indicator1 == 'rgb(0, 0, 255)') {
        $(this).css({ 'background-color': 'rgb(255, 165, 0)' });
    }
    else if (indicator1 != 'rgb(255, 165, 0)') {
        $(this).css({ 'background-color': 'rgb(0, 0, 255)';
    }
});

再看看你的第二次测试:“如果不是橙色,那就把它变成蓝色”

答案 2 :(得分:-1)

对于页面中的每个元素,ID必须是唯一的。因此,您不能在两个不同的div上使用相同的Id。这就是造成问题的原因。如果你想制作具有相同id的div来将它们分组,我建议你使用一个类。