Javascript getElementByID
我正在使用CodeIgniter 2.0,我想用Javascript更改div的内容,但我似乎无法获得它。下面是一个精简版来演示我的问题: 我的控制器:Javascript getElementByID,javascript,codeigniter,getelementbyid,Javascript,Codeigniter,Getelementbyid,我正在使用CodeIgniter 2.0,我想用Javascript更改div的内容,但我似乎无法获得它。下面是一个精简版来演示我的问题: 我的控制器: <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Index extends CI_Controller { function __construct() { parent::__constr
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Index extends CI_Controller {
function __construct()
{
parent::__construct();
}
function index()
{
$this->load->view('index.php');
}
}
/* End of file index.php */
/* Location: ./application/controllers/index.php */
我的看法是:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title><?php echo $this->config->item('app_name'); ?> : Welcome!</title>
<script type="text/javascript">
function returnObjById( id )
{
if (document.getElementById)
var returnVar = document.getElementById(id);
else if (document.all)
var returnVar = document.all[id];
else if (document.layers)
var returnVar = document.layers[id];
return returnVar;
}
alert('fetching moonstarttime : ' + returnObjById('moonstarttime') );
</script>
</head>
<body>
<div id="moonstarttime" name="moonstarttime" >I want this</div>
</body>
</html>
但是当页面加载时,我总是获取moonstarttime:null。我在Chrome和IE中都试过了,我做错了什么?javascript在节点加载之前执行javascript在节点加载之前执行
window.onload = function(){
function returnObjById( id )
{
if (document.getElementById)
var returnVar = document.getElementById(id);
else if (document.all)
var returnVar = document.all[id];
else if (document.layers)
var returnVar = document.layers[id];
return returnVar;
}
alert('fetching moonstarttime : ' + returnObjById('moonstarttime') );
}
或者在关闭body标记之前,将脚本按原样放置在out assing window.onload中
或者在关闭正文标记之前,将脚本按原样放置在out assing window.onload中。您正在页面标题中运行脚本,因此它会在正文加载之前运行。您无法访问该元素,因为它尚不存在
将脚本放在元素之后,或将其放在函数中,然后从正文的onload事件调用函数。您正在页面标题中运行脚本,因此它在正文加载之前运行。您无法访问该元素,因为它尚不存在
将脚本放在元素之后,或者将其放在函数中,从主体的onload事件调用函数。我认为发生的情况是,您试图在DOM完全加载之前检索元素。请注意,选择元素的代码在您要获取的项之前。如果您在有问题的元素之后运行代码,您应该获得对该元素的引用
另一方面,javascript库(如really)可以帮助您完成这项工作,并具有一个helper函数ready,确保只有在加载页面和初始化DOM之后才能执行代码 我认为发生的情况是,您试图在DOM完全加载之前检索元素。请注意,选择元素的代码在您想要获取的项目之前。如果您在有问题的元素之后运行代码,您应该获得对该元素的引用
另一方面,javascript库(如really)可以帮助您完成这项工作,并具有一个helper函数ready,确保只有在加载页面和初始化DOM之后才能执行代码 正如其他人提到的,您的函数是在构建DOM树之前运行的 如果您不想等待onload函数,例如,如果您加载了大量图像,它可能会等待很长时间,那么您可以在此处使用注释5,这可能会加快页面的明显响应速度 如果你把你的代码放在元素后面,并加上一个延迟,你也可以。 因此,您可以使用setTimeout,如下所述: ,并有类似于: setTimeoutfunction returnObjectByIdname{…},30
这将延迟函数运行30毫秒。正如其他人提到的,您的函数在构建DOM树之前运行 如果您不想等待onload函数,例如,如果您加载了大量图像,它可能会等待很长时间,那么您可以在此处使用注释5,这可能会加快页面的明显响应速度 如果你把你的代码放在元素后面,并加上一个延迟,你也可以。 因此,您可以使用setTimeout,如下所述: ,并有类似于: setTimeoutfunction returnObjectByIdname{…},30
这将延迟函数运行30毫秒。我建议使用jQuery。它将消除对if..elseif的需要,以及不必测试所有类型的浏览器功能的需要 在jQuery中: 只需拨打以下电话:
<script type="text/javascript">
$(document).ready(function () {
alert('fetching moonstarttime : ' + $('#moonstarttime') );
}
</script>
我建议使用jQuery。它将消除对if..elseif的需要,以及不必测试所有类型的浏览器功能的需要 在jQuery中: 只需拨打以下电话:
<script type="text/javascript">
$(document).ready(function () {
alert('fetching moonstarttime : ' + $('#moonstarttime') );
}
</script>
谢谢,我没有意识到Javascript支持嵌套functions@rlb.usa:是的,但与问题无关。您只需要在onload处理程序中或在元素之后调用returnObjById函数的代码,如果愿意,您可以将returnObjById函数保留在原来的位置。谢谢,我没有意识到Javascript支持嵌套functions@rlb.usa:是的,但与问题无关。您只需要在onload处理程序中或在元素之后调用returnObjById函数的代码,如果愿意,可以将returnObjById函数保留在原来的位置。