hasClass和addClass不适用于动态内容来自ajax

时间:2014-01-01 04:45:28

标签: javascript jquery

我有一个javascript函数,可以通过添加/删除“隐藏”类来展示和隐藏文档上的html DIV,看起来这个

function Expose (castid){
    if ( $('#newsitemcontent-' +castid).hasClass('hidden')){
        $('#newsitemcontent-' +castid).removeClass('hidden');                                            
        $('#broadcast-' +castid).addClass('ExposeNews');
    } else {                                            
        $('#newsitemcontent-' +castid).addClass('hidden');
        $('#newsitemcontent-' +castid).slideUp("fast");
        $('#broadcast-' +castid).removeClass('ExposeNews');
    }      

    return false;

}

此函数正常使用已打印的DIV,它默认来自php,但是如果使用javascript编写任何div,例如由

编写的DIV
$(output).insertBefore('.broadcast:first').fadeIn('slow');

它不会运行。我认为该函数无法看到从javascript打印的DIV的DIV ID

jquery打印的html例如

<div id="broadcast-1" class="broadcast news highlightedbroadcast" onclick="Expose(1)">
                <div class="newsitemtitle">
                    <a class="stopp" href="#" target="_blank" title="title">title</a>
                </div>
            </div>
            <div id="newsitemcontent-1>" class="newsitemcontent hidden">

                msg

            </div>
            <div class="newsitemcontentmisc">something will come here</div>
</div>

并且javascript正在打印这样的html(它使用https://github.com/janl/mustache.js/blob/master/mustache.js来渲染隐藏div内容中的文本作为模板)

    var solobroadcast_template =$("#hidden_solobroadcast").html()
    var convertedvars = {
                broadcasts_ids: this.castid,
                broadcasts_titles: this.casttitle,
                broadcasts_castmsgs: function (){
                    return contentmsg;
                }
            };
   var output = Mustache.render(solobroadcast_template, convertedvars);             
    $(output).insertBefore('.broadcast:first').fadeIn('slow');

问题是,Expose功能在已经打印的内容下工作正常,但是如果页面使用javascript打开新代码,则问题是工作,但隐藏的类没有添加或删除。

任何建议?

1 个答案:

答案 0 :(得分:0)

您的代码似乎很好。尝试使用on():

<div id="broadcast-1" class="broadcast news highlightedbroadcast" data-bc="1">

$('.broadcast').on('click', function() {
  Expose($(this).attr('id').split('-')[1]);
  // OR
  // Expose($(this).data('bc'));
});