jQuery find()在AJAX结果上只工作一次?
我对jQuery还不熟悉,我在使用jQuery方法操作AJAX结果时遇到了一些问题 我使用AJAXjQuery find()在AJAX结果上只工作一次?,jquery,ajax,Jquery,Ajax,我对jQuery还不熟悉,我在使用jQuery方法操作AJAX结果时遇到了一些问题 我使用AJAXget并对结果输出执行find方法。但这似乎只起了一次作用。在find()参数中使用相同选择器的后续尝试无效。不同的选择器可以工作,但同样,只能工作一次 在遍历AJAX结果时,似乎发生了什么事情 AJAX调用 $.get('sections.htm', {}, function(data) { var $response = $('<div />').html(d
get
并对结果输出执行find
方法。但这似乎只起了一次作用。在find()
参数中使用相同选择器的后续尝试无效。不同的选择器可以工作,但同样,只能工作一次
在遍历AJAX结果时,似乎发生了什么事情
AJAX调用
$.get('sections.htm', {}, function(data) {
var $response = $('<div />').html(data);
showContent("teaser");
function showContent(nav) {
loadContent(nav);
loadSlimboxHack();
$('#content').fadeIn(400);
}
这是可行的,但如果我再次尝试showContent(“.triser”)
,它会失败,因为它似乎找不到任何东西,因此#内容
会被覆盖而没有任何内容
看看我的网站,看看
乍一看,我认为您有问题
$response
变量不在事件处理程序的闭包范围内捕获(例如在单击->淡出->显示内容时)。我猜如果您传递$response
变量,而不是尝试全局引用它,那么它将被修复。例如,以您的示例为例,如下所示:
$.get('sections.htm', {}, function(data) {
var $response = $('<div />').html(data);
showContent("teaser", $response);
function showContent(nav, $response) {
loadContent(nav, $response);
loadSlimboxHack();
$('#content').fadeIn(400);
}
...
function loadContent(nav, $response) {
if (nav == 'teaser')
{
$('#content').html($response.find('.teaser'));
}
...
$.get('sections.htm',{},函数(数据){
var$response=$('').html(数据);
showContent(“摘要”,$response);
功能显示内容(导航,$response){
装载内容(导航,$response);
loadSlimboxHack();
$(#content').fadeIn(400);
}
...
功能加载内容(导航,$response){
如果(导航=='striser')
{
$('#content').html($response.find('.trister'));
}
...
这样,您就可以保证当您使用它时,
$response
始终在那里。另一个选项是通过在$(文档)之外声明它,使$response
真正成为全局的.ready
谢谢,实际上我已经试过传递$response
了,但运气不好。我又试了一次,还试过你提出的将$response
全球化的建议。运气不好
最重要的是,$response
在loadContent()
中可用。似乎一旦找到选择器,就不能再“使用”?例如,一旦页面加载,就会发生以下情况
if (nav == 'teaser')
{
$('#content').html($response.find('.teaser'));
}
但是,点击其中一个预告图片将启动一个事件
$('div.teaser_img').live("click", function() {
var nav = $(this).attr("id");
$('#content').fadeOut(400, function() {
showContent(nav, $response);
});
然后在loadContent()中启动一个条件
if (nav == projects[i])
{
var tag = '#' + nav;
$('#content').html($response.find('div.teaser' + tag));
$('#content').append($response.find('div.concept' + tag));
break;
}
因此,由于加载页面时已经找到了div.trister
,#content
只能使用div.concept
来编写。其他任何选择器只要还没有使用过,都可以工作。您可以使用$response的内容并将其中的一些内容附加到其他元素中。这意味着它们可以移动e从$response中退出并进入他们的新家,因此选择器只能工作一次
这样看吧。如果你从钱包里拿出你的一个,而且只有10美元,放在我的钱包里,下次你再看你的钱包时,它就不在了。为什么?因为它在我的钱包里。@redsquare,
非常感谢!这使我走上了正确的道路
对于新手来说,append()
在单个选择器上下文中的行为就像是“移动”而不是“复制”。这显然是新手中的一个常见错误。而且还没有完全记录在案?我现在感觉不太糟!:)
因此,在本例中,除了使用append()
之外,我还需要使用clone()
$('#content').append($response.find('div.concept' + tag).clone());
太好了!问题解决了
$('#content').append($response.find('div.concept' + tag).clone());