2013-03-19 73 views
1

过去几天我一直在为这一块付出沉重的代价,我希望有人能够提供帮助。 基本上这里就是我有...jquery如果元素ID与其他元素相似,那么添加类

<div id="ORDER/SUB/DD" class="box1">content</div> 
<div id="ORDER/GIFT/CC" class="box1">content</div> 
<div id="ORDER/SUB/CC" class="box1">content</div> 

<div id="ORDER/GIFT/CC/1" class="box2">content</div> 

所有box1 ID汇总然而,动态创建和我想要的是一个新的类chosenOffer添加到box1的div的ID是在该box2股利。 所以它看起来像下面...

<div id="ORDER/SUB/DD" class="box1">content</div> 
<div id="ORDER/GIFT/CC" class="box1 chosenOffer">content</div> 
<div id="ORDER/SUB/CC" class="box1">content</div> 

<div id="ORDER/GIFT/CC/1" class="box2">content</div> 

box2格将始终有一个ID匹配box1的div的人,除了一些额外的字符(如本例中的斜线和数量)。任何帮助非常感谢!

+2

[你有什么尝试?](http://www.whathaveyoutried.com) – George 2013-03-19 23:56:27

+1

我一直在黑暗中摸索老实说话!我知道最小的jquery,足以让我日复一日,但这已经超出了我的范围,而且我正忙于工作,因为我们的系统目前无法做到这一点,所以我必须“让它看起来像它可以'与造型 – vignette 2013-03-20 00:01:50

回答

2
$('.box1').each(function(){ 
    var id = this.id; 
    var $match = $('.box2[id*="'+id+'"]'); 

    if($match.length){ 
    $(this).addClass('chosenOffer'); 
    return false; // You can stop checking .box1's now 
    } 
}); 

DEMO:http://jsfiddle.net/2pcVa/

说明:

我们将通过.box1的的.each(),看是否能找到一个.box2包含当前框的ID。
如果存在$match,我们将该类添加到当前的.box1return false; - 这意味着我们不必通过.box1的其余部分,因为我们已经找到了匹配。

我们使用CSS中的属性选择器的强大功能(jQuery使用相同的)。 *=表示“包含”。
克里斯Coyier写了一篇很好的文章关于他们在这里:http://css-tricks.com/attribute-selectors/

+0

太棒了,非常感谢你。我明天会正确地测试它(目前应该睡觉而不工作!),但它看起来很完美。感谢您的解释,真的很感激它,我已经经历了很多其他堆栈溢出问题和jQuery教程,这让我很生气! – vignette 2013-03-20 00:11:42

+0

@downvoter - 请解释一下自己 – ahren 2013-03-20 00:40:50

+0

这个效果很好 - 虽然有一个错误类型,你可能想在'$('。box2 [id * =''+ id +']'')中修改 - 只需引号在括号内。正如我所说,我知道这是一个错误,但:)再次感谢! – vignette 2013-03-20 10:26:22

2

很像ahren的答复,但使用老派“的indexOf”,它工作正常,我相匹配的ID(和它的循环在找到第一个匹配的元素之后退出好转):

$.each($('.box1'), function() { 
    if ($('.box2').attr('id').indexOf(this.id) >= 0) { 
    $(this).addClass("chosenOffer"); 
    return false; 
    } 
}) 
+0

这个效果非常好,非常感谢:) – vignette 2013-03-20 10:27:28

相关问题