2013-07-22 40 views
1

问题:我们正在非常受限制的CMS上构建网站。我们需要替换锚点href中的某个函数。不幸的是,加载的内容是外部的,这段代码不起作用:jQuery:无法更改外部加载的内容

的jQuery:

$(document).ready(function() { 
    $('a[href*="show_upsell_dialog"]').each(function(e){ 
      $(this).attr('href', $(this).attr('href').replace('show_upsell_dialog(', 'more_details_1(')); 
    }); 
}); 

HTML位:

<a href="javascript:show_upsell_dialog(1238)">Details</a> 

问题:为什么呢?我如何使它工作?

+0

什么,而不是发生了什么?如果这些数据是从外部加载的,那么在数据实际加载之前调用这段代码? – tymeJV

+1

首先,您不需要if($('a [href * =“show_upsell_dialog”]')。length)语句 - 如果返回的.each不匹配,则不会发生替换 – LorDex

+0

没有任何反应发生。看起来像我的代码无法看到外部加载的内容 - 可能是因为它加载后我的代码加载... – chuckfinley

回答

1

如果您将无法访问到$不用彷徨或由$不用彷徨返回的承诺,你的选择是非常有限的。

另一种方法是使用全局ajax回调函数,该函数在调用具有期望选项的请求时解除绑定。

function completeCallback (e, xhr, options) { 
    // updated 
    if (options.url == "/ejax-order-step/") { 
     $(e.currentTarget).off('ajaxComplete',completeCallback); 
     $('a[href*="show_upsell_dialog"]').attr('href',function(href){ 
      return href.replace('show_upsell_dialog(', 'more_details_1('); 
     }); 
    } 
} 
$(document).ajaxComplete(completeCallback); 

不过请注意,它需要之前它监听请求是否完整定义了这个回调。

在你的情况虽然,我不明白为什么你不能只是这样做:

window.show_upsell_dialog = window.more_details_1; 
+0

非常有趣,将尽力使它工作 – chuckfinley

+0

虽然...你是用这个来代替每一个调用'show_upsell_dialog'的锚标签?不只是用你自己的函数来覆盖这个函数呢?它在窗口中被定义。 –

+0

你不需要看到函数来替换它,见update。如果它在窗口上(它必须被调用以这种方式),您可以完全访问它。 –

-1

你可以试试这个代码:

$(function() { 
    $('a[href*="show_upsell_dialog"]').each(function(){ 
     $(this).attr('href', $(this).attr('href').replace('show_upsell_dialog', 'more_details_1')) 
    }); 
}) 
+0

不,没有工作 – chuckfinley

+0

你可以显示你的html? –

+0

我编辑了我的代码,有错误 –

-1

给出函数的名称和 的setTimeout中调用它(yourFuncName,1000);

如果1秒太短尝试2.我只是猜测,但setTimeout的有时是非常有用......

+0

我希望你不是认真的 – chuckfinley