替代使用[removed](Alternatives to [removed])

2019-06-24 20:07发布

我在的情况下,似乎我必须在JavaScript库文件撰写使用。 该脚本必须知道脚本定义的区域的宽度。 然而,剧本并没有在这方面的任何标签的任何显性知识。 如果有一个div的显性知识那么这将是这么简单:

<div id="childAnchor"></div>
<script ref...
 //inside of referenced script
 var divWidth = $("#childAnchor").width();
</script>

因此,所引用的脚本里面,我想使用document.write是这样做的:

<script ref...
 //inside of referenced script
 var childAnchor = "z_87127XNA_2451ap";
 document.write('<div id="' + childAnchor + '"></div>');
 var divWidth = $("#" + childAnchor).width();
</script>

不过,我真的不喜欢这个文件撰写的实现。 是否有任何替代这里使用document.write? 我不能简单地用窗口的原因是,这是一个是主视图页面内呈现一个视图内。 窗口将无法正常得到嵌套的区域宽度。

该地区是相当多的在这里:

<body>
 <div>
  <div>
   <div>
     AREA

该地区有没有任何其他的div的知识。

Answer 1:

这只是发生在我身上,我记得你的问题:脚本代码可以找到脚本块是在,所以你可以从那里遍历DOM。 当前的脚本块将是(代码运行时,DOM仍然被解析)在此刻的DOM的最后一个。

通过查找当前脚本块,你可以找到它的父元素,任意位置添加新的元素:

<!doctype html>
<html>
    <head>
        <style>
        .parent .before { color: red; }
        .parent .after { color: blue; }
        </style>
    </head>
    <body>
        <script></script>
        <div class="parent">
            <span>before script block</span>
            <script>
            var s = document.getElementsByTagName('script');
            var here = s[s.length-1];

            var red = document.createElement("p");
            red.className = 'before';
            red.innerHTML = "red text";
            here.parentNode.insertBefore(red, here);

            var blue = document.createElement("p");
            blue.className = 'after';
            blue.innerHTML = "blue text";
            here.parentNode.appendChild(blue);
            </script>
            <span>after script block</span>
        </div>
        <script></script>
    </body>
</html>​

http://jsfiddle.net/gFyK9/2/

请注意“蓝色文本”跨度将之前插入了“后脚本块”跨度。 这是因为“后”跨度不会在DOM目前存在appendChild被调用。


但是有一个非常简单的方法,使这一失败 。



Answer 2:

没有办法,这种方法。 这是该脚本可以找到元素的宽度,它是嵌套在不知道有关它加载到DOM 东西的唯一途径。

使用document.write()适当使用时是合法的。 虽然,追加到DOM的新元素是优选的,它并不总是可用选项。



Answer 3:

如果你知道哪些子元素是你可以用参数n个子jQuery中。 否则你会需要通过他们与每一个迭代()



Answer 4:

创建并追加像这样的孩子:

var el = document.createElement('div');
el.id='id';
document.body.appendChild(el);

但是我真的不知道你想和这个做什么有什么的宽度是什么,它可能会返回0。



文章来源: Alternatives to document.write