Jquery 选择器不适用于动态 .get 加载的内容

Posted

技术标签:

【中文标题】Jquery 选择器不适用于动态 .get 加载的内容【英文标题】:Jquery selector not working with dynamic .get loaded content 【发布时间】:2015-04-06 02:06:30 【问题描述】:

我有一个页面,该页面通过单击按钮通过 .get 请求动态加载内容。加载的 html 页面我无法获得任何 jquery 选择器来定位该页面上的任何内容。 我尝试将警报脚本放在加载的页面上,但没有成功。

我认为正在发生的事情是当页面加载时,我试图定位的内容不存在,并且在加载页面时它不会再次检查?这只是我的猜测,任何帮助将不胜感激。

这是页面内容动态加载到主页的位置。

$(".load-page").click( function()
    var href = $(this).attr("data-href");
    $.get(href,function (hdisplayed) 
      $("#content").html( hdisplayed );
    );
);

这是我用来选择页面内容的方法。

$(function() 
    $("#div").click(function()
    alert("hello");
);

【问题讨论】:

【参考方案1】:

尝试使用实时处理程序:

$(document).on('click', '#div', function() 
    alert("hello");
);

它绑定到文档并处理动态添加的内容,而.click() 绑定到调用.click() 时已经存在的确切元素。

另请参阅详细的documentation jQuery 的on() 方法。

【讨论】:

天哪,非常感谢。整天都在研究这个问题,并一直认为我的选择器早些时候都搞砸了。这更有意义【参考方案2】:

您想使用 .on() 将附加到动态添加的元素。

$(function() 
  $("body").on('click', '#div', function() 
     alert("hello");
  );
);

另外,不要用 div 或 span 或其他元素名称给元素 id,这是不好的做法。我建议使用目标类选择器而不是 id,特别是对于动态生成的内容。另外,我将 body 设置为您的目标,因为我不确定您的代码结构是什么(您的 #div 元素在哪里)

【讨论】:

【参考方案3】:

事件处理程序将与父元素上的“.on”竞标一起使用。但如果您只需要选择动态加载的元素进行其他操作,则需要等待内容实际加载。

$('#parent_element').load(
   url, //url for the AJAX request
   , //data to be sent with the request
   function() //this function will be called when content has loaded
       $('#dynamic_child_element').css('background','#000');
   
);

【讨论】:

以上是关于Jquery 选择器不适用于动态 .get 加载的内容的主要内容,如果未能解决你的问题,请参考以下文章

字符串上的 jQuery 选择器不适用于 Internet Explorer

Jquery 不适用于两个 :not 选择器?

jquery 属性选择器不适用于数据属性

jQuery 属性等于选择器不适用于自定义属性

jQuery 选择器不适用于添加的类

为啥 jQuery 选择器适用于 Chrome,但不适用于 Safari?