创建元素到位

时间:2011-08-18 20:15:24

标签: javascript

我想在javascript函数运行的地方创建一个元素。

<script>
var uniqid='an unique Id';
document.write('<iframe id='+uniqid+'></iframe>');
someAsyncFunction(callback)
</script>

在代码的其他部分我为这个元素设置了附加参数

<script>
callback=function(paramfromcallback){
    getElementById(uniqid).url=paramfromcallback;
}
</script>

但这在IE中不起作用。我找不到这个元素。

我的问题是:

  1. 页面上有很多元素,因为每个元素必须只设置这个元素参数

  2. 我不知道哪个元素是父元素,我不知道脚本元素ID。我需要在第一个脚本名为

  3. 的地方插入一个元素
  4. 在任何回调之前执行的代码的第一部分,我想让它保持异步

2 个答案:

答案 0 :(得分:1)

根据您的脚本块命中的顺序,您可能会遇到许多问题。 document.write()使用内联脚本创建了有趣的问题。通常,在页面完成加载之后,或者在另一个document.write()块内,之后的任何脚本将无法使用doc.write的结果。等待窗口完全加载可以解决您的问题。这样的事情怎么样 -

定义一次:

function callback(id) {
  var el = document.getElementById(id);
  if (el !== null) {
    el.url = 'http://google.com';
  }
}

然后你想写出iframe的任何地方:

(function(){
  var id = 'an_unique_Id';
  document.write('<iframe id='+id+'></iframe>');

  var l = window.onload;
  var n = function() { someAsyncFunction(function() { callback(id); }); };

   window.onload = (typeof l == 'function') ? function() { l(); n(); } : n;
})();

答案 1 :(得分:0)

首先,使用:

document.getElementById(uniqid).url = 'http://google.com';

该方法是文档对象的一部分,因此您只能通过预先document来使用它。

其次,使用:

var callback = function() {

可能不会破坏您的代码,但应使用var

声明变量