首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

继续 寻找 jquery each 不能深度 遍历 的 有关问题 解决

2013-02-24 
继续 寻找 jquery each 不能深度 遍历 的 问题 解决代码的目的是让所有的span class 失效,包括span 嵌套中

继续 寻找 jquery each 不能深度 遍历 的 问题 解决
代码的目的是让所有的span class 失效,包括span 嵌套中的 span , 现在的问题是不能 把span 嵌套中的 span class 失效.见代码:


<!DOCTYPE html >  
<html>  
<head>  
<meta  charset="UTF-8">  
<title>replace</title>  
<script 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();   
   }
  });
})
});

热点排行