Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么使用jQuery.replace会导致网页未找到错误?_Javascript_Jquery_Html - Fatal编程技术网

Javascript 为什么使用jQuery.replace会导致网页未找到错误?

Javascript 为什么使用jQuery.replace会导致网页未找到错误?,javascript,jquery,html,Javascript,Jquery,Html,我正在用javascript/jquery脚本编写一些HTML。脚本使用for-in循环遍历javascript对象,使用jQuery.append语句将HTML格式行中的某些模式替换为对象中的数据,最后使用.replace修改DOM。在下面粘贴的代码中,您将看到一些注释掉的行。如果我运行带有注释的代码,就会得到预期的结果。然而,一旦我删除这些评论,我就会得到奇怪的结果。在未注释“OptionA”的情况下,结果如下……页面加载不再工作。页面显示“未找到网页”消息,更令人惊讶的是,omnibox中

我正在用javascript/jquery脚本编写一些HTML。脚本使用for-in循环遍历javascript对象,使用jQuery.append语句将HTML格式行中的某些模式替换为对象中的数据,最后使用.replace修改DOM。在下面粘贴的代码中,您将看到一些注释掉的行。如果我运行带有注释的代码,就会得到预期的结果。然而,一旦我删除这些评论,我就会得到奇怪的结果。在未注释“OptionA”的情况下,结果如下……页面加载不再工作。页面显示“未找到网页”消息,更令人惊讶的是,omnibox中的加载状态变为:

file:///Users/user1/Documents/Udacity/IntroJS/frontend-nanodegree-resume/%3Cdiv%20class=%22location-文本%22%3ELexington,%20KY%3C/div%3E

页面正确加载时的正常页面加载语句如下所示:

file:///Users/user1/Documents/Udacity/IntroJS/frontend-nanodegree-resume/debug.html

未注释optionB时,只显示“工作经验”一词,但不打印日期

代码段:

<!DOCTYPE html>
<html>
<head>  
<meta charset="utf-8">
<title>Debug</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
</head>
<body>
<div id="main">
   <div id="workExperience" class="gray">
      <h2>Work Experience</h2>
    </div>
</div>
<script>
var HTMLworkStart = '<div class="work-entry"></div>';
var HTMLworkDates = '<div class="date-text">%data%</div>';
var HTMLworkLocation = '<div class="location-text">%data%</div>';
var work = {
        "job1":{
            "dates": "2007 to 2016",
            "location": "Raleigh, NC"
            },

            "job2":{
                "dates": "2003 to 2007",
                "location": "Los Angeles, CA"   
            },

            "job3":{
                "dates": "2000 to 2003",    
                "location": "Lexington, KY"
            }
};

            for(var job in work){
                if(work.hasOwnProperty(job))
                {
                   var dates = HTMLworkDates.replace("%data%", work[job].dates);
                   //OptionA: var location = HTMLworkLocation.replace("%data%", work[job].location);
                   //OptionB: var location = HTMLworkLocation.replace("%data%", "Raleigh, NC";
                   $("#workExperience").append(HTMLworkStart);
                   $(".work-entry:last").append(dates);
                   $(".work-entry:last").append(location);

                }
            }

</script>
</body>

</html>

调试
工作经验
var HTMLworkStart='';
var HTMLworkDates='%data%';
var HTMLworkLocation='%data%';
var工作={
“工作1”:{
“日期”:“2007年至2016年”,
“地点”:“北卡罗来纳州罗利”
},
“工作2”:{
“日期”:“2003年至2007年”,
“地点”:“加利福尼亚州洛杉矶”
},
“工作3”:{
“日期”:“2000年至2003年”,
“地点”:“肯塔基州列克星敦”
}
};
用于(工作中的var作业){
if(工作。拥有自己的财产(工作))
{
var dates=HTMLworkDates.replace(“%data%”),work[job].dates);
//选项A:var location=HTMLworkLocation.replace(“%data%”),work[job].location);
//选项B:var location=HTMLworkLocation.replace(“%data%”),“罗利,北卡罗来纳州”;
$(“#工作经验”).append(HTMLworkStart);
$(“.work entry:last”)。追加(日期);
$(“.work entry:last”).append(位置);
}
}
为了调试这个问题,我将上面的代码片段从我正在处理的项目的其余部分中分离出来。我试图查看是否存在语法错误等。但是分离代码会得到相同的结果

所以我的问题是:

-为什么jQuery.replace会导致在这个孤立的案例中找不到网页

-标记为OptionA的行有什么特别之处,它会导致整个页面加载失败,并进一步奇怪地修改omnibox中的行,如上所述


-我的完整代码中还有一行类似于“位置文本”示例中没有引起任何问题的行。

将位置变量更改为其他名称。位置是全局位置属性的名称,它控制窗口加载的URL。

将位置变量更改为其他名称。位置是全局位置属性的名称,它控制窗口加载的URLads.

因为您的代码在任何函数之外运行,
var
声明创建全局上下文的属性:
window
window.location
已经是内置的全局属性,隐式设置其值意味着您希望浏览器从新URL加载页面

您可以更改变量名,或者将所有代码包装在一个函数中,以便
var
声明创建局部变量


这个问题与使用
.replace()
没有任何关系(反过来,它与jQuery没有任何关系;它是JavaScript的一部分).

因为您的代码在任何函数之外运行,
var
声明创建全局上下文的属性:
window
window.location
已经是一个内置的全局属性,隐式设置其值意味着您希望浏览器从新URL加载页面

您可以更改变量名,或者将所有代码包装在一个函数中,以便
var
声明创建局部变量

这个问题与使用
.replace()
(反过来,它与jQuery无关;它是JavaScript的一部分)无关。

位置属性(以及窗口)与JavaScript本身无关。它们不是ECMAScript规范的一部分。它们是浏览器实现。就像alert()不是JavaScript的一部分一样。location属性(以及相应的窗口)与JavaScript本身无关。它们不是ECMAScript规范的一部分。它们是浏览器实现。就像alert()不是JavaScript的一部分一样。