- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想通过将数据的 id
作为 script
标记中的属性将数据附加到 div 中。在此示例中,first-div
应该附加“test1”,second-div
应该附加“test2”。
但是,结果是“test1”和“test2”都附加到 second-div
。 first-div
是空的。我猜这与 document.currentScript
的运作方式有关。有什么方法可以得到我想要的结果吗?
<div id="first-div"></div>
<div id="second-div"></div>
<script attr1="name1" attr2="name2" to-div="first-div" type="text/javascript">
var this_script = document.currentScript;
var attr1 = this_script.getAttribute('attr1');
var attr2 = this_script.getAttribute('attr2');
var append_div = this_script.getAttribute('to-div');
$.ajax({
url: "/dir?attr1=" + attr1,
type: 'GET',
success: function(data) {
$('#' + append_div).append("test1");
});
</script>
<script attr1="name3" attr2="name4" to-div="second-div" type="text/javascript">
var this_script = document.currentScript;
var attr1 = this_script.getAttribute('attr1');
var attr2 = this_script.getAttribute('attr2');
var append_div = this_script.getAttribute('to-div');
$.ajax({
url: "/dir?attr1=" + attr1,
type: 'GET',
success: function(data) {
$('#' + append_div).append("test2");
});
</script>
此外,在解决方案中,脚本不能有 id
属性,这就是我尝试使用 document.currentScript
的原因。
这样做的原因是代码将托管在我的服务器上。给定通过脚本标签上的属性传递的参数,代码会将信息附加到用户想要的 div 中。最后,用户应该能够使用:
<script attr1="var1" attr2="var2" to-div="custom-div" src="http://www.myurl.com/assets/script.js" type="text/javascript"></script>
要根据我在服务器上运行的代码将数据插入到他们的 custom-div
中,这取决于他们提供的参数 attr1
和 attr2
。
最佳答案
你的问题是 var append_div
是一个全局变量,每次遇到新的脚本标签时,它都会被新值覆盖。
由于 ajax 是异步的,当响应返回时,其他脚本标签将被评估,因此 append_div
将具有最后一个脚本标签的值。
您可以通过创建一个包装 ajax 的函数来解决这个问题
function doAjax(elementId, attr1) {
$.ajax({
url: "/dir?attr1=" + attr1,
type: 'GET',
success: function (data) {
$('#' + elementId).append("test2");
}
});
}
doAjax(append_div, attr1);
@Rhumborl 指出的更好的解决方案是使用 IIFE
(function( elementId, attr1){
$.ajax({
url: "/dir?attr1=" + attr1,
type: 'GET',
success: function (data) {
$('#' + elementId).append("test2");
}
});
}(elementId, attr1);
或者将所有代码包装在一个 IIFE 中,并且不需要传入任何参数。
(function(){
var this_script = document.currentScript;
var attr1 = this_script.getAttribute('attr1');
var attr2 = this_script.getAttribute('attr2');
var append_div = this_script.getAttribute('to-div');
$.ajax({
url: "/dir?attr1=" + attr1,
type: 'GET',
success: function(data) {
$('#' + append_div).append("test2");
}
});
}();
关于javascript - 使用 document.currentScript 将数据附加到 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32466974/
我在 Chrome 扩展中定义了 XHR 请求,该请求从特定网站提取 JavaScript 文件并在其中执行函数。像这样: //This will return the remote JS file
浏览器是Chrome,应该支持document.currentScript 但是 index.html 1.js setInterval(function() { var fullUrl =
当用户滚动页面时,我将附加一个 div 标签,并在同一 div 中附加一个 js 标签。 现在,我用“js_div_1”、“js_div_2”、“js_div_3”等指向父标记,并附加一些内容。 HT
这是一个示例代码: HTML alert('This is alert!') JS window.alert = function(data) //alert() over-riding {
我使用 html(),但找不到在父脚本中获取变量的方法。 child.html document.currentScript.childVar = { para
我想从 shadowDOM 内部访问当前脚本或 shadow root。 并且,最终目的是在同一个 shadowDOM 中获取 div.target 元素。 我尝试使用 document.curren
我想通过将数据的 id 作为 script 标记中的属性将数据附加到 div 中。在此示例中,first-div 应该附加“test1”,second-div 应该附加“test2”。 但是,结果是“
我正在学习网络组件。要获取模板,我需要这样做: The sky is blue var tmpl = (document.currentScript||document._curre
如何在脚本 type="module"中获取 ownerDocument? text let owner = document.currentScript.ownerDocument /
这是一个返回图像宽度的函数,给定图像的 url: async function getImageWidthByUrl(imgUrl) { const imgEl = document.create
我是一名优秀的程序员,十分优秀!