首先,我认为您的 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>
然后改变像
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;
}