继续 寻找 jquery each 不能深度 遍历 的 问题 解决
代码的目的是让所有的span class 失效,包括span 嵌套中的 span , 现在的问题是不能 把span 嵌套中的 span class 失效.见代码:
<!DOCTYPE html >
<html>
<head>
<meta charset="UTF-8">
<title>replace</title>
<script style="max-width: 100%;height: auto;width: auto\9;" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$('#r').click(function(){
$('*').each(function(){
if(this.tagName=='SPAN'){
var t = $(this).html();
var c = $(this).attr('class');
var a = new Array();
a = c.split(' ');
var classhide = '' ;
$.each(a,function(index,callback){
classhide+=a[index]+"-- ";
})
$(this).replaceWith(' <span class="'+classhide+'"> '+t+' </span> ');
}
});
alert(id1.outerHTML)
})
});
</script>
</head>
<body>
<div id='id1' style="width: 600px; height: 300px;">
<span class="blue bolder">
Hi <i>Hello</i>
<span class="underline red"> And </span>
<b>Goodbye</b>
</span>
<span class="oblique green"> How Are You </span>
</div>
<button id="r">click</button> <br />
</body>
</html>
<style type="text/css">
.blue{color: blue; }
.green{color: green; }
.red{color: red; }
.oblique{font-style: oblique;}
.bolder{font-style: bolder;}
.underline{text-decoration:underline}
.hidden{visibility:hidden;}
.visible{visibility:visible;}
</style>
[解决办法]
遍历下样式替换为其他的,然后再替换回来就行了
<!DOCTYPE html >
<html>
<head>
<meta charset="UTF-8">
<title>replace</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script type="text/javascript">
function toggle(btn){
var hide=btn.value=='隐藏';
$('#id1 span').each(function(){
this.className= $(this.className.split(' ')).map(function(){return hide?this+'--hide':this.replace('--hide','')}).get().join(' ');
});
btn.value=hide?'显示':'隐藏';
}
</script>
</head>
<body>
<div id='id1' style="width: 600px; height: 300px;">
<span class="blue bolder">
Hi <i>Hello</i>
<span class="underline red"> And </span>
<b>Goodbye</b>
</span>
<span class="oblique green"> How Are You </span>
</div>
<input type="button" value="隐藏" onclick="toggle(this)"/> <br />
</body>
</html>
<style type="text/css">
.blue{color: blue; }
.green{color: green; }
.red{color: red; }
.oblique{font-style: oblique;}
.bolder{font-style: bolder;}
.underline{text-decoration:underline}
.hidden{visibility:hidden;}
.visible{visibility:visible;}
</style>
[解决办法]
先把span class放到一个数组变量中,然后再进行显示/隐藏控制
$(function(){
var clsArray = {};
$("span").each(function(index){
var cls = $(this).attr("class");
clsArray[index] = cls;
});
$("#r").click(function(){
$("span").each(function(index){
var cls = $(this).attr("class");
if(cls == "") {
$(this).attr("class",clsArray[index]);
}else{
$(this).removeClass();
}
});
})
});