まず、あなたのhtmlにエラーがあると思います。
...
<div><span class='curly2'>}</span></div>
</div>
になります
...
<div><span class='curly1'>}</span></div>
</div>
してみてください
$(document).ready(function() {
$("#board").on("mouseenter mouseover", "[class^=curly]", function() {
var className = $(this).attr('class').split(" ")[0];
$("." + className).addClass("curlyHighlight");
});
$("#board").on("mouseleave mouseout", "[class^=curly]", function() {
var className = $(this).attr('class').split(" ")[0];
$("." + className).removeClass("curlyHighlight");
});
});
とjsfiddle。
そして、私の提案は、クラスをデータプロパティに変更することです。
<div>abc<span data-class='curly1'>{</span></div>
次に、JavaScriptを次のように変更します
var className = $(this).attr('data-class');
カーリーが左右のブレースだけの場合。コードは次のようになります。フィドル
*HTML
<div id='board'>
<div>
abc<span data-class='curly1'>{</span>
<div>
'jkl'm<span data-class='curly1'>{</span>no<span data-class='curly2'>}</span>
</div>
<div>
'jkl'm<span data-class='curly1'>{</span>
<div>
'jkl'm<span data-class='curly1'>{</span>no<span data-class='curly2'>}</span>
</div>
<span data-class='curly2'>}</span>
</div>
<span data-class='curly2'>}</span>
</div>
</div>
ロジックを 1 に変更しました。ペアブレースを見つけます。2. 両方の CSS を変更します。
ここにコードがあります
*javascript
$(document).ready(function() {
$("#board").on("mouseenter mouseover", "[data-class^=curly]", function() {
var nodes = $(this).add(findPair($(this)));
nodes.addClass("curlyHighlight");
});
$("#board").on("mouseleave mouseout", "[data-class^=curly]", function() {
var nodes = $(this).add(findPair($(this)));
nodes.removeClass("curlyHighlight");
});
});
function findPair(n) {
var nextBraces = $([]);
var brace = n.text();
if (brace == '{') {
nextBraces = n.nextAll("[data-class^=curly]");
} else if (brace == '}') {
nextBraces = n.prevAll("[data-class^=curly]");
}
var count = 0;
var result = false;
nextBraces.each(function(index, value) {
var v = $(value);
if (v.text() == brace) {
count++;
} else if (count != 0) {
count--;
} else {
result = v;
return false;
}
});
return result;
}