如何在执行后刷新jQuery Selector Value?

时间:2010-05-04 15:53:01

标签: jquery jquery-selectors

$(document).ready(function(){

var $clickable_pieces = $('.chess_piece').parent();
$($clickable_pieces).addClass('selectee'); // add selectee class

var $selectee = $('.chess_square.selectee');

// wait for click 
$($selectee).bind('click',function(){
    $('.chess_square.selected').removeClass('selected');
    $(this).addClass('selected');
    { ........... }

});

我最初将'selectee'课程注入所有具有'chess_piece'类的div,然后我选择具有该类$('.chess_square.selectee')的DIV。

<div id="clickable">
    <div id="div1" class="chess_square">
    </div>

    <div id="div2" class="chess_square selectee">
          <div id="sub1" class="chess_piece queen"></div>
    </div>

    <div id="div3" class="chess_square">
    </div>

</div>

有两种类型的DIV元素,其类名为“chess_square selectee”和“chess_square”,并不意味着可点击。我将'rps_square选择'的Sub DIV从DIV2移动到DIV1,并添加和删除类完全相同的类。意思是Queen Piece从Div2移到Div1。

<div id="div1" class="chess_square selectee">
  <div id="sub1" class="chess_piece queen"></div>
</div>

<div id="div2" class="chess_square">
</div>

<div id="div3" class="chess_square">
</div>

然而,问题是jQuery没有更新var $selectee = $('.rps_square.selectee');。即使我更改了类名,DIV1也不可点击,DIV2仍然可以点击。顺便说一句,我使用了jQuery UI可选,但也没有刷新。

1 个答案:

答案 0 :(得分:8)

而不是.bind(),请使用.live(),如下所示:

$('.chess_square.selectee').live('click',function(){
    $('.chess_square.selected').removeClass('selected');
    $(this).addClass('selected');
    { ........... }    
});

并不是jQuery没有更新集合,尽管它不是。您已将事件处理程序绑定到匹配的DOM元素。

使用.live()侦听click的DOM根目录,如果匹配选择器则执行...如果类改变了,它将不再匹配选择器,处理程序赢了“执行,这就是你所追求的。反之亦然,如果有任何新的东西与选择器匹配,当它为click气泡时,处理程序将为它执行。