把javascript放在头上和放在主体上有区别吗
is there a difference between putting a javascript in the head or in the body?
我对javascript很陌生,不知道使用"selectize"输入的这两段代码之间是否有区别。
两者都有效,但我不知道其中一个是否更好,或者它们是否真的一样。如果有的话,哪一个更可取?是否有关于在html文档中放置javascript的"规则"或最佳实践?
抱歉,如果这是非常琐碎的:)
tl;dr
第一个代码在<body>
标签内有$('#location').selectize({ .... })
第二个代码具有相同的$('#location').selectize({ .... })
,但在<head>
标签中,并包含在中
$(document).ready(function () {
$('#location').selectize({
....
})
)}
<html lang="en">
<head>
<title>title</title>
<link href="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.1/css/selectize.bootstrap3.css"
rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.1/js/standalone/selectize.js"></script>
</head>
<body>
<form role="form" class="form-vertical" method="POST" action="/profile">
<div class="form-group">
<label for="location">location</label>
<input type="text" value="Lorien, 58120 Corancy, France" placeholder="" name="location"
id="location" class="form-control selectized" tabindex="-1" style="display: none;">
<div class="selectize-control form-control single">
<div class="selectize-input items full has-options has-items">
<div class="item" data-value="Lorien, 58120 Corancy, France">Lorien, 58120 Corancy,
France
</div>
<input type="text" autocomplete="off" tabindex="" style="width: 4px;"></div>
<div class="selectize-dropdown single form-control" style="display: none;">
<div class="selectize-dropdown-content"></div>
</div>
</div>
<input type="submit" value="Update" name="submit" id="submit">
</div>
</form>
<script>
$('#location').selectize({
valueField: 'formatted_address',
labelField: 'formatted_address',
searchField: 'formatted_address',
maxItems: 1,
delimiter: ';',
create: false,
load: function (query, callback) {
if (!query.length) return callback();
$.ajax({
url: "googleloc",
type: 'GET',
dataType: 'json',
data: {
search: query,
},
error: function () {
callback();
},
success: function (res) {
callback(res.results);
googresults = res.results;
}
});
},
onChange: function (value) {
if (!value.length) return;
for (var key in googresults) {
if (googresults[key].formatted_address == value) {
var lat = googresults[key].geometry.location.lat;
var lng = googresults[key].geometry.location.lng;
for (var component in googresults[key].address_components) {
if (googresults[key].address_components[component].types[0] == "country") {
var cc = googresults[key].address_components[component].short_name;
}
}
}
}
$('#latitude').val(lat);
$('#longitude').val(lng);
$('#country_code').val(cc);
}
});
</script>
</body>
</html>
以及在头中具有所选项目的版本2
<html lang="en">
<head>
<title>title</title>
<link href="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.1/css/selectize.bootstrap3.css"
rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.1/js/standalone/selectize.js"></script>
<script>
$(document).ready(function () {
$('#location').selectize({
valueField: 'formatted_address',
labelField: 'formatted_address',
searchField: 'formatted_address',
maxItems: 1,
delimiter: ';',
create: false,
load: function (query, callback) {
if (!query.length) return callback();
$.ajax({
url: "googleloc",
type: 'GET',
dataType: 'json',
data: {
search: query,
},
error: function () {
callback();
},
success: function (res) {
callback(res.results);
googresults = res.results;
}
});
},
onChange: function (value) {
if (!value.length) return;
for (var key in googresults) {
if (googresults[key].formatted_address == value) {
var lat = googresults[key].geometry.location.lat;
var lng = googresults[key].geometry.location.lng;
for (var component in googresults[key].address_components) {
if (googresults[key].address_components[component].types[0] == "country") {
var cc = googresults[key].address_components[component].short_name;
}
}
}
}
$('#latitude').val(lat);
$('#longitude').val(lng);
$('#country_code').val(cc);
}
});
});
</script>
</head>
<body>
<form role="form" class="form-vertical" method="POST" action="/profile">
<div class="form-group">
<label for="location">location</label>
<input type="text" value="Lorien, 58120 Corancy, France" placeholder="" name="location"
id="location" class="form-control selectized" tabindex="-1" style="display: none;">
<div class="selectize-control form-control single">
<div class="selectize-input items full has-options has-items">
<div class="item" data-value="Lorien, 58120 Corancy, France">Lorien, 58120 Corancy,
France
</div>
<input type="text" autocomplete="off" tabindex="" style="width: 4px;"></div>
<div class="selectize-dropdown single form-control" style="display: none;">
<div class="selectize-dropdown-content"></div>
</div>
</div>
<input type="submit" value="Update" name="submit" id="submit">
</div>
</form>
</body>
</html>
最好将javascript放在</body>
之前的底部。这样就不会阻碍渲染(有利于性能)。此外,在这一点上,您知道DOM(HTML元素树)已经为您准备好了。
$(document).ready(function () {})
是jQuery等待DOM就绪的方式。如果你把javascript放在<head>
中,你就必须使用这种技术,因为很明显,你想要处理的所有实际HTML都在它之后,需要进行解析。一旦DOM准备就绪,就会调用回调(传递给.ready()
的函数)。
在jQuery革命之初,这个问题并不是很热门。jQuery在顶部,随时可以使用脚本。
随着为任何可能的目的开发的数千个插件的爆炸性增长,你会看到网页上有许多必须加载的插件。
将所有这些东西放在<head>标签会减慢网站加载的时间,这是因为加载插件需要完成太多的请求。
因此,将运行初始HTML所需的"css"answers"js"放在头部,并在页面末尾的"body"标记所有其他脚本之前,这是一条常见的经验法则。
在所有这些的最后,你可以有一个额外的脚本标签,其中可以放置一些自定义代码,例如
$(document).ready(function(){
//stuff here
})
您应该放置javascript代码来快速加载页面。浏览器从上到下渲染代码。如果您将javascript代码放在底部,将首先加载页面元素,然后再加载javascript代码。
如果您将JS放在头部,并且没有侦听器来检测DOM加载,那么您可能无法操作DOM对象。通常最好将脚本放在正文的底部,这样可以防止任何错误,并允许您向所有DOM元素添加内容。
例如,将以下脚本放在头中会导致错误
<script>
document.getElementById('myElement').setAttribute('data-myValue','myValue')
</script>
- "#"keyCode=222 vs 51(Chrome与Android版Chrome)-为什么有区别
- smoothstate.js和pjax有区别
- JavaScript中的嵌入循环和嵌套循环之间有区别吗
- jQuery递归函数调用和Javascript之间有区别吗;s setInterval
- 使用构造函数创建对象和返回对象有区别吗
- 预加载图像和缓存图像之间有区别吗
- Web组件与小工具:有区别吗
- 使用依赖注入时,通过引用调用服务或直接调用服务是否有区别
- Google Maps/Google Places:getPlace 和 getDetails 方法之间有区别吗?
- 直接在 HTML 中设置“onclick”与通过 DOM 设置“onclick”之间有区别吗?
- 使用嵌入时,元素和属性指令之间是否有区别
- 我让用户将脚本加载到网页中的方式是否有区别
- 这些JavaScript包含定义是否有区别
- 在JavaScript中测试元素的样式属性和css值之间有区别吗
- 为普通JS和AngularJS应用程序添加RWD有区别吗
- alert() 和 Notification.alert() 在 Xcode 中使用 PhoneGap 之间有区别吗?
- 把javascript放在头上和放在主体上有区别吗
- 有return语句和没有return语句的函数之间有区别吗
- 除了 JavaScript 之外,是否有任何其他语言在大括号开始位置(同一行和下一行)之间有区别
- 使用嵌入式文档列表和使用ObjectId列表之间有区别吗