日期:2014-05-16  浏览次数:20368 次

获取不到子元素的文本内容?
在页面有
<li class="collectTabView"><span class="current">全部收藏</span></li>
<li class="collectTabView"><a href="#">特别关注</a></li>
然后通过JavaScript:
var arrCollectTabView = $(".collectTabView");
for ( var i = 0; i < arrCollectTabView.length; i++) {

  (function(i) {
arrCollectTabView[i].onclick = function(){
for ( var i = 0; i < arrCollectTabView.length; i++) {

}
YAHOO.collectUser.gettotalnum(arrCollectTabView.children()[i].text);
};
  })(i);
}
为什么”arrCollectTabView.children()[i].text“报错,把其中的i变成0,1分别就是全部收藏和特别关注,但是我必须要是变量啊,如何修改呢?

------解决方案--------------------
arrCollectTabView[i].onclick = function(){
for ( var i = 0; i < arrCollectTabView.length; i++) {

}
YAHOO.collectUser.gettotalnum(arrCollectTabView.children()[i].text);



arrCollectTabView[i].onclick = function(){
for ( var j = 0;j < arrCollectTabView.length; j++) {

}
YAHOO.collectUser.gettotalnum(arrCollectTabView.children()[i].text);
------解决方案--------------------
你搞了个空循环
arrCollectTabView[i].onclick = function(){
for ( var i = 0; i < arrCollectTabView.length; i++) {

}
到了这里 i==2 了
YAHOO.collectUser.gettotalnum(arrCollectTabView.children()[i].text);

------解决方案--------------------
Lz对jQuery的事件机制和DOM操作有待加强喔
再有就是,对jQuery与原生的用法之间不要搞混了

JScript code
$(".collectTabView").click(function(){
    //在这里面,使用$(this)可获取每一个<li class="collectTabView"></li>的DOM结构
    var child=$(this).children();
    if(child.hasClass('current')){
        child.replaceWith('<a href="#">'+child.html()+'</a>');
        /*
        //下面的方式是使用jQuery操作DOM的方式
        var links=$('<a>').attr("href","#").text(child.html());
        $(this).empty();
        $(this).append(links);
        */
    }else{
        child.replaceWith('<span class="current">'+child.html()+'</span>');
        /*
        //下面的方式是使用jQuery操作DOM的方式
        var span=$('<span>').addClass('current').html(child.html());
        $(this).empty();
        $(this).append(span);
        */
        
    }
})

------解决方案--------------------
child是一个jQuery对象。之前有和你说过,不要把jQuery和原生的搞混了
jQuery筛选子元素,可以用child.eq(index)来进行

再一个,jQuery的each()方法可以用来遍历所有元素

到现在还没搞明白你到底是想干嘛

你将事件触发放在li的click事件中,如果是想批量替换6个li中。span换成a,a换成span

那么,你这li中的a永远无法生效,你这是要干嘛呢??

HTML code
<script type="text/javascript">
$(function(){
    $(".collectTabView").click(function(){
        $(this).parent().find('li').each(function(){
            var child=$(this).children();
            if(child.hasClass('current')){
                child.replaceWith('<a href="#">'+child.html()+'</a>');
            }else{
                child.replaceWith('<span class="current">'+child.html()+'</span>');
            }
        })
    })
})
</script>
<div>
    <ul>
        <li class="collectTabView"><span class="current">全部收藏1</span></li>
        <li class="collectTabView"><a href="#">特别关注</a></li>
        <li class="collectTabView"><span class="current">全部收藏2</span></li>
        <li class="collectTabView"><a href="#">特别关注</a></li>
        <li class="collectTabView"><span class="current">全部收藏3</span