javascript函数转换为jquery等效函数

javascript函数转换为jquery等效函数,javascript,jquery,Javascript,Jquery,我有一个如下编写的javascript函数,它在Firefox中可以很好地下载给定的txt内容 self.downloadURL = function (url) { var iframe; iframe = document.getElementById("hiddenDownloader"); if (iframe === null) { iframe = document.createElement

我有一个如下编写的javascript函数,它在Firefox中可以很好地下载给定的txt内容

  self.downloadURL = function (url) {
        var iframe;
        iframe = document.getElementById("hiddenDownloader");        
        if (iframe === null) {
            iframe = document.createElement('iframe');
            iframe.id = "hiddenDownloader";
            iframe.style.display = "none";
            document.body.appendChild(iframe);
        }
        iframe.src = url;
    }
但由于某些原因,它不能与IE 9一起正常工作。所以我尝试转换成等价的jquery,因为jquery与所有浏览器都兼容

以下是相同函数的jquery等价物:

   self.downloadURL = function (url) {
        var iframe;
        iframe = $("#hiddenDownloader");        
        if (iframe === null) {
            iframe = $('<iframe></iframe>');
            iframe.id = "hiddenDownloader";            
            $("#hiddenDownloader").css("display", "none");
            $(document.body).append(iframe);
        }
        iframe.src = url;
    }
self.downloadURL=函数(url){
var-iframe;
iframe=$(“#隐藏下载程序”);
if(iframe==null){
iframe=$('');
iframe.id=“hiddenDownloader”;
$(“#hiddenDownloader”).css(“显示”、“无”);
$(document.body).append(iframe);
}
iframe.src=url;
}

但现在它在两种浏览器中都不起作用了。请帮助让我知道我做错了什么。

下载文件似乎是一种奇怪的方式

在任何情况下,这可能与最初的工作原理相同:

if (!iframe.get(0)) {
  ...
}
。。。还有另一张海报提到的
id
属性。

您的问题在于:

iframe = $('<iframe></iframe>');
iframe.id = "hiddenDownloader";       
这里也有同样的问题:

if (iframe === null) {
需要检查
iframe
长度的地方:

if (iframe.length === 0) {
再次在
iframe.src=url也许你可以找出这个:

iframe.attr('src', url);
但是为什么要将普通JavaScript转换为jQuery?试试:

iframe = $("#hiddenDownloader")[0];
  • 替换
    iframe.src=url带有
    iframe.attr(“src”,url+“?”+Math.random())以防止IE9中的缓存问题
    
  • 替换iframe.id=“hiddenDownloader”带有
    iframe.attr(“id”,“hiddenDownloader”)
  • if(iframe==null){
    替换为
    if(iframe.length==0){
这些行是不等价的。第二行创建了一个jQuery对象,因此null的检查永远不会等于true。此链接可以帮助您:

或者您可以将其添加到顶部:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


您是否收到任何特定的错误消息?我没有收到任何特定的错误。它只是在IE 9中没有响应
iframe.length==0
(或者可能只是
!iframe.length)
比针对
null
IMHO进行测试要好。
iframe.length==0
请确定:)@null无需==0。
if(iframe.length)
很好:)@Archer我知道。这是因为0是错误的,因为很多其他东西都是JavaScript(未定义、null,“”,等等)但是对于不太熟练的程序员来说,
===0
更清楚:)好的观点,我刚刚意识到这已经说过了,我也错过了一个
#Hangsheadinshame@Alagesan帕拉尼:这可能是IE9中的缓存问题,请尝试我的更新答案
url+“?”+Math.random()
iframe = document.getElementById("hiddenDownloader");          
iframe = $("#hiddenDownloader");        
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">