jQuery .each内部函数

时间:2011-09-14 14:41:22

标签: jquery

我不知道为什么.each()在我的代码中没有工作

function showhide(id){
    $('#mydiv'+id).each(function(){
    if(this).is(":visible") ) {
      $(this).css('display','none'); 
    }else {     
      $(this).css('display','block');       
        }
    });
}

<span id="mydiv" style="display:none;">
blah blah blah
</span>

<a href="#" onclick="showhide($id);return false;" />show/hide</a>

6 个答案:

答案 0 :(得分:4)

你正在使用一个id选择器 - 在页面中id应该是唯一的,所以用id选择器调用.each是没有意义的。

而是为每个涉及的元素分配一个类并使用

$('.mydivclass').each( ... );

答案 1 :(得分:1)

看起来你的第3行有一些语法问题。在这里它被清理干净;

...
if ( $(this).is(":visible") ) {
...

答案 2 :(得分:1)

正如其他人所说,ID应该是唯一的,因此迭代具有相同ID的多个元素没有多大意义,而是使用类。

另外,构建JavaScript的一种更好的方法是在一个地方附加你的事件处理程序(在你的情况下是onclick),而不是在html中内联,这样可以使代码更清晰,也更容易维护。

而不是直接访问css属性,$('yourelement').css('display', 'none') 你可以$('yourelement').hide()$('yourelement').show();

所以你的JS现在看起来像下面的那个。

$(function(){
   var my_divs = $('.mydiv'); 
   $('#show_hide').click(function(){
       my_divs.each(function(){
           var $this = $(this); 
           if( $this.is(':visible') )
               $this.hide(); 
           else 
               $this.show(); 
       }); 
   }); 
}); 

在您的HTML中,您现在拥有。

<span class="mydiv">
    blah blah blah
</span>

<a id="show_hide" href="#" />show/hide</a>

在你的css文件中

.mydiv{
  display: none; 
}

答案 3 :(得分:0)

function showhide(id){
    $('#mydiv'+id).each(function(){
    if($(this).is(":visible") ) {
      $(this).css('display','none'); 
    }else {     
      $(this).css('display','block');       
        }
    });
}

这应该是最终产品

答案 4 :(得分:0)

尝试

function showhide(id){
    $('#'+id).each(function(){
        $this = $(this);
        if($this.is(":visible") ) {
            $this.css('display','none'); 
        }else {     
            $this.css('display','block');       
        }
    });
}

或者

function showhide(id){
    $('#'+id).each(function(){
        $this = $(this);
        if($this.is(":visible") ) {
            $this.hide(); 
        }else {     
            $this.show();       
        }
    });
}

<span id="mydiv" style="display:none;">
blah blah blah
</span>

<a href="#" onclick="showhide("mydiv");return false;" />show/hide</a>

答案 5 :(得分:0)

虽然已接受的答案已解决了潜在的问题,但您可能会大大简化您的代码:

function showhide(classname){
  $('.' + classname).toggle();
}

使用.each的显式迭代是不必要的,因为大多数jQuery方法会自动遍历jQuery对象中的所有匹配元素。此外,显示和隐藏可以使用.toggle完成。