1

过去几天我一直在绞尽脑汁,希望有人能提供帮助。基本上这就是我所拥有的......

<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>

然而,所有的box1id 都是动态创建的,我想要的是向 div 添加一个新类chosenOfferbox1它的 id 在box2div 中。所以它看起来像下面......

<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>

div将box2始终具有与其中一个box1div 匹配的 id,除了一些额外的字符(如示例中的斜杠和数字)。非常感谢任何帮助!

4

3 回答 3

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
  }
});

演示:http: //jsfiddle.net/2pcVa/

解释:

我们正在遍历's 并查看是否可以找到包含当前框 ID 的.each()a 。 如果 a存在,我们将类添加到当前的and - 这意味着我们不必遍历's 的其余部分,因为我们已经找到了匹配项。.box1.box2
$match.box1return false;.box1

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

于 2013-03-20T00:04:07.423 回答
2

很像 ahren 的回复(并通过在找到第一个匹配元素后退出循环来改进),但使用老派的“indexOf”,这对我来说可以很好地匹配 ID:

$.each($('.box1'), function() {
  if ($('.box2').attr('id').indexOf(this.id) >= 0) {
    $(this).addClass("chosenOffer");
    return false;
  }
})
于 2013-03-20T01:13:00.120 回答
-1

这当然是可行的,但我不确定您使用的是最简单/最强大/可扩展的方法......

我要做的是使用一个新属性并为相应的项目设置它。从长远来看,这使它更易于管理/编辑。

http://www.w3schools.com/jsref/met_element_setattribute.asp

于 2013-03-20T00:13:19.490 回答