从许多div获取属性to toggle class

时间:2015-03-22 04:30:10

标签: javascript jquery

所以我试图检查收件箱页面上的一堆div,我从AJAX调用返回一个数组,以了解更改字体样式的div。要实现这一点,我必须首先检查他们的数据值属性,然后添加/删除一个类(粗体与正常的读取/未读消息)。问题是,当我引用messageDiv对象时,它会切换页面上的所有消息。循环遍历消息对我来说最有意义,但我不知道如何存储div数组来实现这一点。

data['messages']=[3,5,8,9]

var messageDiv=$('.widget .inbox-row');

if (data['status']=='A'){//read
    if ($.inArray(messageDiv.data('value'),data['messages']) && messageDiv.hasClass('unread-msg')) {
        messageDiv.removeClass('unread-msg').addClass('read-msg');
    }
}

if (data['status']=='N'){//unread
    if ($.inArray(messageDiv.data('value'),data['messages']) && messageDiv.hasClass('read-msg')) {
        messageDiv.removeClass('read-msg').addClass('unread-msg');
    }
}

这是消息的样子,在页面上多次迭代:

<div class="<?php echo $message_read_status; ?> inbox-row" data-value="<?php echo $messageid; ?>" >
            <?php echo $body; ?>
    </div>

真诚地感谢您的帮助。对不起,如果这是一个非常具体的问题。我试图让它尽可能不具体。

1 个答案:

答案 0 :(得分:1)

问题是e是一组元素,所以当你说messageDiv.data('value')时,它会返回集合中第一个元素的数据值。

您需要迭代数组中的每个项目并针对每个项目运行条件

var messageDiv = $('.widget .inbox-row');

messageDiv.each(function () {
    var $this = $(this);
    if (data['status'] == 'A') { //read
        if ($.inArray($this.data('value'), data['messages']) > -1 && $this.hasClass('unread-msg')) {
            $this.removeClass('unread-msg').addClass('read-msg');
        }
    } else if (data['status'] == 'N') { //unread
        if ($.inArray($this.data('value'), data['messages']) > -1 && $this.hasClass('read-msg')) {
            $this.removeClass('read-msg').addClass('unread-msg');
        }
    }
})