0

以下のコードを書いて、一致する外側の div にクラスを追加しました。これで、以下を達成するためのよりエレガントな方法が必要であることがわかりました!

if ($(".cur").hasClass("one")) { $("#outer").addClass("one"); }
if ($(".cur").hasClass("two")) { $("#outer").addClass("two"); }
if ($(".cur").hasClass("three")) { $("#outer").addClass("three"); }
if ($(".cur").hasClass("four")) { $("#outer").addClass("four"); }
if ($(".cur").hasClass("five")) { $("#outer").addClass("five"); }
if ($(".cur").hasClass("six")) { $("#outer").addClass("six"); }

どんな改善も喜んで受け取られます:)

4

5 に答える 5

2

正規表現を使用して一致するクラスを見つけてから、一致するクラスを#outerに追加できます。下記参照、

$(function () {
    var regClasses = /(one|two|three|four|five|six)/g;
    var $cur = $('.cur'),
        $outer = $('#outer');

    $cur.each(function () {        
        $outer.addClass(this.className.match(regClasses).join(' '));
    });
});

デモ

于 2012-04-30T21:37:20.677 に答える
2
var classNames = '';    
$('.cur').each(function(){
    if (classNames.indexOf(this.className + ' ') === -1)
        classNames += this.className + ' ';
});

var classes = classNames.split​(" ");​​​
var $outer = $('#outer');    
$.each(classes, function(index, value){
    if (value !== 'cur')  
        $outer.addClass(value);
});

ライブデモ

ノート:

  • このコードを使用すると.cur、コード内のクラスを「焼き付ける」必要はありません。自動的に行われます。
  • のすべてのクラス.cur(それ自体を除くcur) をコピーするので、それがあなたにとって良いかどうかを決めるのはあなた次第です。
于 2012-04-30T21:16:29.733 に答える
1

.hasClassすべての反復で呼び出されるわけではないため、これはより高速になるはずです。

// define which classes you want to match
match_classes = ["one", "two", "three", "four"];
// grab all the classes on the inner element
elm_classes = $(".cur").attr("class").split(" ");
// cache the outer element for quick access
$outer = $("#outer");

// iterate over the list of classes you want to match
$.each(match_classes, function(i, val){
// if one of those classes exists on inner, add it to outer
  if(elm_classes.indexOf(val) > -1) $outer.addClass(val);
});
于 2012-04-30T21:23:37.760 に答える
1

これはどう:

var classes = ['one', 'two', 'three'],
    $cur = $('.cur'),
    $outer = $("#outer");

$.each(classes, function(i, v) {
    if ($cur.hasClass(v)) $outer.addClass(v); 
})

または反復は、次のような純粋な js として実装できます。

for (var i in classes) {
    var v = classes[i];
    ....
}

または(より良い)for代わりに使用します:

var len = classes.length;
for (var i = 0; i < len; i++) {
    var v = classes[i];
}
于 2012-04-30T21:16:50.883 に答える
0
var classes = ['one', 'two', 'three', 'four', 'five', 'six'];
$.each(classes, function(key, value){
    if($('.cur').hasClass(value)) $('.cur').closest('div').addClass(value); 
});

トリックを行う必要があり、最も近い( 'div')を使用して外側のdivを取得します。

于 2012-04-30T21:23:00.117 に答える