了执行Javascript,需要在HTML文件内以特定的方式书写JavaScript的代码,JavaScript的书写方法有多种,其执行的流程也各不相同:
此种嵌入方法无法操作<script>之后的DOM元素。因为<script>之后的DOM元素还未构造,因此在<script>标签内就无法取得位于其后的DOM元素。
此种嵌入方法可以指定defer、async属性。defer可以推迟执行,async可以异步执行。
此种嵌入方法在页面读取完后再对其执行,所以可以对所有的DOM元素操作。
<body onload="alert('hello')">
window.onload = function(){alert('hello');};
当window.onload事件触发时,页面上所有的DOM、样式表、脚本、图片、flash都已经加载完成了。
//window.onload不能同时编写多个。
//以下代码无法正确执行,结果只输出第二个。
window.onload = function(){
alert("test1");
};
window.onload = function(){
alert("test2");
};
//$(document).ready()能同时编写多个
//结果两次都输出
$(document).ready(function(){
alert("Hello World");
});
$(document).ready(function(){
alert("Hello again");
});
window.onload和body中onload也有些许区别:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.0.js"></script>
<script language="javascript">
window.onload = haha;
function haha(){console.log("window.onload");}
if(document.addEventListener){
function DOMContentLoaded(){
console.log("DOMContentLoaded");
}
document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
}</script>
</head>
<body onload="console.log('bodyonload');">
<div id="div1">a</div>
</body>
</html>
在IE10和FireFox下,结果为 :
"DOMContentLoaded"
"bodyonload"
说明body中的onload会覆盖window.onload
在chrome下,结果为:
DOMContentLoaded
window.onload
bodyonload
然后,如果把javascript代码移到最下面,结果又会是什么样呢?
chrome和IE10、FireFox的结果竟然是一样的:
DOMContentLoaded
window.onload
IE 10、Fire Fox可以理解,window.on load和body中的 on load 谁在下面就是谁覆盖谁,只会执行后面的那个。
onload方法可能需要等待时间,而本方法可以在完成HTML解析后发生的事件,减少等待时间。
在chrome、IE10和FireFox中,执行结果是:DOMContentLoaded然后才是onload的输出。所以说一般情况下,DOMContentLoaded事件要在window.onload之前执行,当DOM树构建完成的时候就会执行DOMContentLoaded事件。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript" src="jquery2.js"></script>
<script language="javascript">
window.onload = haha;
function haha(){console.log(document.getElementById("div1"));}
if(document.addEventListener){
function DOMContentLoaded(){
console.log("DOMContentLoaded");
}
document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
}
</script>
</head>
<body>
<div id="div1">a</div>
</body>
</html>
如果你是个jQuery使用者,你可能会经常使用$(document).ready();或者$(function(){}),这都是使用了DOMContentLoaded事件
5.1 使用原生js方法
动态创建script标签,并指定script的src属性
function loadJs(url, callback) {
var script = document.createElement('script');
script.type = "text/javascript";
if (typeof(callback) != "undefined") {
if (script.readyState) {
script.onreadystatechange = function() {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
callback();
}
}
} else {
script.onload = function() {
callback();
}
}
}
script.src = url;
document.body.appendChild(script);
}
loadJs("test.js", function() {
alert('done');
});
还可以使用同样的原理动态加载css文件,只不过插入的的父节点是head标签。
5.2 使用document.write/writeln()方式
该种方式可以实现js文件的动态加载,原理就是在重写文档流,这种方式会导致整个页面重绘。
document.writeln("<script src=\"http://lib.sinaapp.com/js/jquery/1.6/jquery.min.js\"></script>");
需要注意的是特殊字符的转义。
5.3 使用jQuery
使用getScript(url,callback)方法实现动态加载js文件
$.getScript('test.js',function(){
alert('done');
});
-End-
载说明:原创不易,未经授权,谢绝任何形式的转载
有时候,我们希望使用 JavaScript 将文本以纯文本形式粘贴到可编辑内容元素中。
在本文中,我们将讨论如何使用 JavaScript 将文本以纯文本形式粘贴到可编辑内容元素中。
我们可以通过监听粘贴事件并修改粘贴行为,将纯文本粘贴到可编辑内容元素中。
例如,如果我们有以下的 div 元素:
<div contenteditable>
</div>
然后,我们可以通过监听粘贴事件来修改粘贴行为:
// 获取可编辑的 div 元素
const editor = document.querySelector('div');
// 监听粘贴事件
editor.addEventListener("paste", (e) => {
e.preventDefault(); // 阻止默认粘贴行为
// 获取粘贴的纯文本内容
const text = e.clipboardData.getData('text/plain');
// 将纯文本插入到可编辑元素中
document.execCommand("insertHTML", false, text);
});
当你需要在可编辑的内容元素中以纯文本形式粘贴文本时,你可以使用上述代码来实现。让我逐步解释每一部分的作用:
1. 首先,我们通过 `document.querySelector('div')` 获取到一个可编辑的 `<div>` 元素,这个元素将用于粘贴操作。
2. 然后,我们使用 `editor.addEventListener("paste", (e) => { ... });` 添加一个粘贴事件监听器。这意味着当用户尝试粘贴内容时,我们将执行指定的操作。
3. 在事件监听器的函数内部,`e` 是代表事件对象的参数。我们使用 `e.preventDefault();` 来阻止浏览器默认的粘贴行为,以便我们能够自行处理粘贴操作。
4. `e.clipboardData.getData('text/plain')` 这行代码用于从剪贴板中获取纯文本内容。`e.clipboardData` 是一个包含剪贴板数据的对象,我们使用 `getData('text/plain')` 方法来获取纯文本数据。
5. 最后,我们使用 `document.execCommand("insertHTML", false, text);` 将获取到的纯文本内容插入到可编辑元素中。`insertHTML` 是一个命令,它允许我们将指定的 HTML 或文本插入到文档中。第三个参数 `text` 是要插入的内容。
综合起来,当用户在可编辑元素中粘贴内容时,粘贴事件会触发。代码阻止默认的粘贴行为,然后从剪贴板中获取纯文本数据,并将它以纯文本的形式插入到可编辑的 `<div>` 元素中,实现了将文本粘贴为纯文本的效果。
通过监听粘贴事件并修改粘贴行为,我们可以将纯文本粘贴到可编辑内容元素中。
由于文章内容篇幅有限,今天的内容就分享到这里,文章结尾,我想提醒您,文章的创作不易,如果您喜欢我的分享,请别忘了点赞和转发,让更多有需要的人看到。同时,如果您想获取更多前端技术的知识,欢迎关注我,您的支持将是我分享最大的动力。我会持续输出更多内容,敬请期待。
能在 JavaScript 中创建一个 HTML 元素吗? 答案是肯定的,你可以在 JavaScript 中创建一个元素让我们看看如何?
如果你想在 JavaScript 中创建一个 div 元素——
要在 JavaScript 中创建新元素,我们使用 document.createElement('div'),而不是 div,您可以分配任何 html 标签,例如 p、h1、h2、h3 等,如果您分配 p 标签,它将创建一个 p 标签。
现在,如果你想给它上一堂课,你可以做到——
为了给我们的新 div 一个类,我们使用 variablename.className = ‘class_name’ ,如上所示。
现在你也可以给它 id —
为了给 newdiv 一个 id,我们的代码是 variablename.id = ‘id_name’;
现在让我们看看我们的输出
现在,从上面的代码中,我创建了一个带有类容器和 id newElement 的 div 元素。
还有另一种方法可以在标签上设置 class 、 id 、 title 、 name ,让我们来看看。
在这里,我定义了 setAttribute() 并在括号内首先定义了标题,然后定义了标题的名称。 除了标题,您可以指定类、id 或任何名称
现在我们来看看我们的输出
您可以清楚地看到,在 div 标签内,我们的代码添加了标题,即“新 div”。
现在如果你想在 div 标签内添加内容怎么办? 例如,在我的 div 元素中,我想添加 Hello medium reader! 我怎样才能做到这一点? 下面来看看吧。
在上面的代码中,我使用 document.createTextNode() 将我的文本分配给变量内容,因此 TextNode 用于为我们的元素提供文本。
所以,我们已经成功地向我们的 div 元素添加了一个文本。
现在,最重要的是,如果您想将内容插入现有的 html 代码以便在浏览器中看到它,您可以通过 insertBefore(newNode, referenceNode) 来完成它的作用是在参考节点之前插入您的节点。
所以在这里我从上面的 html 代码中创建了一个带有类容器和 h1 标签的 div 元素。
现在,我定义了一个名为 maindiv 的变量,并将其分配给具有类容器的 div 元素,并定义了一个变量 h1 并为其分配了 h1 标记。
现在,为了插入我们的节点,我使用了 inserbefore(newNode, referenceNode) ,其中 newNode 是必须插入的节点,即我们的 newdiv ,参考节点是要在其之前插入 newNode 的节点,即我们的 h1 标记。
所以从上面的输出你可以看到我们已经成功地在浏览器中显示了我们的 div 内容。
JavaScript 是一种非常有效的语言,你可以在 JavaScritp 中做很多事情,这些只是它的基础。
谢谢你
*请认真填写需求信息,我们会在24小时内与您取得联系。