2014-01-05 39 views
0

我有一些div和一个按钮。 Divs有zozo [j]属性。如何在div html属性上设置过滤器

当我点击按钮时,我想要设置它们的ID,但不是所有的div,只有那些有j > k。实际上我想用一个过滤器。

<div zozo="sim [0]"></div> 
<div zozo="sim [1]"></div> 
<div zozo="sim [2]"></div> 
    . 
    . // and some div else 
    . 
var k = 1; 

我知道下面的代码是错误的,但我想是这样的:

$("div [zozo='sim ["+ > = k + "]' ]").attr('id' , k+1); 
+2

你的问题不明确。发布无效的语法无济于事。 – elclanrs

+0

为什么不明确。我想选择有sim [j]的div。但j> = 1。 – user3154402

回答

2

好了,所以你要在这里做的是叠代的每个元素,然后做你的计算对每个人的价值进行个别分析。你在谈论基于一些算术计算的选择器 - 我不相信这是存在的。

这里是我会怎么做:

var k = 1; 
$("div[zozo^='sim']").each(function(){ 
    var value = $(this).attr("zozo").match(/(\d+)/)[1]; // remove all except the number 
    value = parseInt(value); // convert it into an actual number 
    if (value >= k){ 
    // if a condition is met - we update the attribute of the current element 
    $(this).attr("id", (value + k)); 
    } 
}); 

我使用jQuery的"attribute starts with" selector here,对具有以字符串“SIM”开始zozo类值的所有元素相匹配。


注意,在你的榜样你想要的id属性设置为k+1。这将始终保持相同的数字,因此您将使用相同的id设置多个元素。你不想那样做。在我的例子中,我确定每个id属性都是唯一的。

退房this demo,你会发现除第一个红色框外,其他所有人都设置了id

0

这样的事情?警告,丑陋的代码

$('#parentdiv > div').each(function() { 
    var $that = $(this); 
    var zozo = parseInt($that.attr('zozo').replace('sin[', '').replace(']', '')); 
    if (zozo >= k) 
     $that.id = k + 1; 
}); 
+1

'$ .each()'在ID选择器上? – MackieeE

+0

@MackieeE:很好。现在删除 – OptimusCrime

+0

谢谢@optimusCrime – user3154402

2

我认为你正在尝试做的:

$("div[zozo^=sim]").attr('id' , function(i){ //Use attribute startswith seletor 
    //return i+1; //return index + 1 as the id 
    return +$(this).attr('zozo').match(/(\d+)/).pop() + 1; 
}); 

或者只设置一个共同的类名来所有这些因素和使用类选择

$("div.myClass").attr('id' , function(i){ //Use attribute startswith seletor 
    return i+1; //return index + 1 as the id 
}); 

还记得即zozo不是一个有效的属性,它与data-*前缀会更合适。

Demo

0

假设数据ZOZO的值总是相同的格式,并假设我理解正确你的问题,这应该工作。当然,你会想要使用更具体的选择器。

$('div').click(function() { 
    var myK = $(this).attr('data-zozo'); 
    myK = myK.charAt(5); 
    myK = parseInt(myK); 

    if (myK >= 1) { 
     $(this).attr('id',myK + 1); 
    } 
}); 

http://jsfiddle.net/isherwood/5g7yU/