2017-03-05 9 views
1

最初に、クリックされたボタンの親が同じパスのクラスを持っているかどうかを確認しています。パスクラスが親のクリックされたボタンクラスに一致する場合は、パス自体にクラスを追加する必要があります。svgパスにクラスを追加するには?

<ul> 
    <li class="modern"> 
    <button>Ex 1</button> 
    </li> 
    <li class="classic"> 
    <button>Ex 2</button> 
    </li> 
<ul> 

<svg> 
    <path class="modern"></path> 
    <path class="classic"></path> 
</svg> 

$("button").on("click", function() { 
    var periodClass = $(this).parent().attr("class"); 
    $("svg path").each(function() { 
     $("svg path").not('.'+periodClass).removeClass("active"); 
     $('svg path.'+periodClass).target.classList.add('active'); 
    }); 
}); 

はまた、あなたの属性を使用する必要がありますので、jQueryのSVGにクラスを追加することはできません

$('svg path.'+periodClass).addClass('active'); 
+0

可能な複製( http://stackoverflow.com/questions/36130050/add-class-on-svg-path-element) – Venugopal

+0

http://stackoverflow.com/questions/36130050/add-class-on-svg-path-element – Venugopal

+0

これを試してみました。しかし、ここではうまくいきません。上記のコードは、人から言われたことを反映しています。私はどこに "e"を定義するかわからないので、ここにはありません。私の場合 –

答えて

0
$("button").on("click", function() { 
    var periodClass = $(this).parent().attr("class"); 
    $("svg path").each(function() { 
     var cl = $(this).attr('class'); 
     $(this).attr('class', cl.includes(periodClass) ? cl + ' active' : cl.replace(/active/g, '')); 
    }); 
}); 

は、チェックこのfiddle

+0

を参照してください。これは、すべてのクラスを削除し、新しいクラスを残して、基本的にはリストに追加しません –

+0

'Ex1'ボタンがクリックされたとき、' active'クラスが '.modern'パスに追加され、他のすべてのパス。 'Ex2'では' .classic'です。これはあなたが望むものではありませんか? – Venugopal

+0

各ループに正規表現を使ったテストは必要ありません! – scraaappy

0

を試してみました。

また、各パスに特定のクラスがあることをすでに知っているので、ループを繰り返す必要はありません。だからあなたは:

$("button").on("click", function() { 
    var periodClass = $(this).parent().attr("class") 

    //here you use .attr and .replace to remove the active class from your svg path 
    $("svg .active").attr("class", $("svg .active").attr("class").replace("active","")); 

    //here you set the new active element 
    $("svg ."+periodClass).attr("class", periodClass+" active"); 

}); 

P.S.携帯電話上のIMタイピングが

+0

$( "svg .periodClass")から$( "svg。" + periodClass)正解となるでしょう –

+0

クラスを追加していません –

+0

jqueryはsvg要素からクラスを追加/削除できません! – scraaappy

2

使用queryselectorかは、以下を参照してください。[SVGパス要素にクラスを追加します]の JQuery can't add a class to an SVG

$("button").on("click", function(e) { 
 
    var periodClass = $(this).parent().attr("class"); 
 
    var paths = document.querySelectorAll("path"); 
 
    var pathToActive = document.querySelector("path."+periodClass); 
 
    for (var i=0;i<paths.length;i++) { 
 
    paths[i].classList.remove("active"); 
 
    } 
 
    pathToActive.classList.add('active'); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul> 
 
    <li class="modern"> 
 
    <button>Ex 1</button> 
 
    </li> 
 
    <li class="classic"> 
 
    <button>Ex 2</button> 
 
    </li> 
 
<ul> 
 

 
<svg> 
 
    <path class="modern"></path> 
 
    <path class="classic"></path> 
 
</svg>

関連する問題