GVKun编程网logo

javascript – 使用getElementById动态创建网站?(js动态创建html元素)

13

如果您对javascript–使用getElementById动态创建网站?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于javascript–使用getElementBy

如果您对javascript – 使用getElementById动态创建网站?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于javascript – 使用getElementById动态创建网站?的详细内容,我们还将为您解答js动态创建html元素的相关问题,并且为您提供关于document.all与getElementById、getElementsByName、getElementsByTagName用法区别-getElementById_javascript技巧、document.getElementById介绍_javascript技巧、document.getElementById的一些细节_javascript技巧、getElementByIdx_x js自定义getElementById函数_javascript技巧的有价值信息。

本文目录一览:

javascript – 使用getElementById动态创建网站?(js动态创建html元素)

javascript – 使用getElementById动态创建网站?(js动态创建html元素)

我正在尝试使用 JavaScript动态创建一个网站,但无法让我的getElementById函数正常工作.我已经探索了很多,发现了一些例子,并试图使它们无法成功(大多数都不使用外部的.js文件).下面是我的JavaScript和HTML代码:

HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Final Project</title>
<script type="text/javascript">
</script>
</head>
<body>
<script type="text/javascript" src="finalProj.js">
</script>
<form name = "myForm">
<h1 id="myHeader"></h1>

JavaScript的:

var firstName = ("RicK");
var courseName = ("WEB 180");

function myheading()
{
document.getElementById('header').write = (firstName + lastName);
}

解决方法

>应该访问某些DOM元素的JavaScript代码必须在HTML中的元素之后,否则元素不会在DOM中生成(假设您编写的JavaScript代码在finalProj.js中):

<body>
   <form name = "myForm">
       <h1 id="myHeader"></h1>
   </from>
   <!-- can access myHeader Now -->
   <script type="text/javascript" src="finalProj.js"></script>
</body>

>不知道写属性,但innerHTML应该这样做:

document.getElementById('myHeader').innerHTML = firstName + lastName;

当然你也必须打电话给myheading()!

document.all与getElementById、getElementsByName、getElementsByTagName用法区别-getElementById_javascript技巧

document.all与getElementById、getElementsByName、getElementsByTagName用法区别-getElementById_javascript技巧

不过,如果您需要查找文档中的一个特定的元素,最有效的方法是 getElementById()。
不过要注意的是使用getElementById时对不同的浏览器执行的结果可能是不同的,以下有相关说明

复制代码 代码如下:

text1:



text2:





我在IE中测试了上面的代码,在第一个文本框中输入1,在第二个文本框中输入2,然后点下面的两个按钮,猜一下结果是什么?
我本意是按钮1返回第一个文本框的值,按钮2返回个文本框的值。
结果是两个按钮都返回了第一个文本框的值。
说明ie执行document.getElementById(elementName)的时候,返回的是第一个name或者id等于elementName的对象,并不是按照ID来查找的。
在fireFox中不存在这样的问题,fireFox执行document.getElementById(elementName)的时候只查找id等于elementName的对象,如果不存在则返回null。
可能IE是考虑的兼容性的问题才这么做的。

以下是我测试所用的代码:

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

这个时候我在两个text中输入的值分别为:eee, www
IE中测试结果为:eee , eee
再看当我把中的id去除时,也即上面代码使用注释中的内容时
我同样输入eee, www
IE中测试结果为:www ,eee
仔细分析上面两个测试的结果:得出结论是:每执行getElementById一次,会将web页面中的所有表单按顺序遍历一次,同时查找id,name两个值,如果存在所要找的id则不再继续查找,如果没有相应的id与之对应则看name值是否与之对应,如果有相应的name与之对应,则不再继续查找。也就是说:
ie执行document.getElementById(elementName)的时候,返回的是第一个name或者id等于elementName的对象,并不是仅按照ID来查找的。
而同样的两个测试在firefox下第一个结果为eee,www,而第二个结果因为没有找到id="ccc"所以返回null
对于这个结果还可参见
http://www.jb51.net/article/16852.htm
他还对getElementById与getElementByName进行了分析,值得一看。

document.getElementById介绍_javascript技巧

document.getElementById介绍_javascript技巧

把你的大脑当做浏览器执行下面的代码两次,分别是IE6和IE9:

复制代码 代码如下:

function testFunc(){
alert(''test'')
}
$(function(){
var g = document.getElementById ,
w = window.testFunc ;
//g
alert(typeof(g));
alert(String(g));
alert(g instanceof Object);
alert(g instanceof Function);
//w
alert(typeof(w));
alert(String(w));
alert(w instanceof Object);
alert(w instanceof Function);
//执行
alert(g(''t''));
w();
});

在标准浏览器中(IE9、FF、chrome等)上述代码执行得非常一致,返回结果如下:
typeof => "function"
复制代码 代码如下:

String => "function #funcName#{[native code]}"
instanceof Object => true
instanceof Function => true

很奇怪,虽然类型是函数,但是我们却不能直接使用括号来执行函数g,而需要使用call

g.call(document,elementId);
但是如果运行环境是IE6,一切看起来非常诡异,下面是运行结果(注意粗体部分):
复制代码 代码如下:

//g
typeof => "object"
String => "function getElementById{[native code]}"
instanceof Object => false
instanceof Function => false
//w
typeof => "function"
String => "function testFunc{alert(''test'')}"
instanceof Object => true
instanceof Function => true


在IE 6下,对于g和w都只能使用括号直接执行函数,而不需要使用call。对于函数g使用下面的方式调用会导致一个“对象没有该属性”的错误:
g.call(document,eleId)
在IE6下,对于自定义的函数testFunc测试结果没有任何问题,但是对于g却十分地诡异!

既然g是object那么为何可以像函数一样用()直接调用执行?
而在标准浏览器中,g既然是函数为什么却不能直接使用()来执行呢?
事实上对于document.getElementById,它到底是function还是object就连jQuery 1.6.2也没有解决这个问题。
在IE6中$.isFunction(g)仍然返回的是false!下面是jQuery 1.6.2的jQuery.isFunction的相关源代码:

复制代码 代码如下:

class2type={};
...
// Populate the class2type map
jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
});
...
type: function( obj ) {
return obj == null ?
String( obj ) :
class2type[ Object.prototype.toString.call(obj) ] || "object";
},
...
isFunction: function( obj ) {
return jQuery.type(obj) === "function";
}

于是在StackOverflow上提了这个问题,好在牛人确实多,很快就有了回复。最后我简单的总结一下给大家参考:
document.getElementById 最初被定义为 HTMLDocument (HTML DOM)接口的一个成员,但是在后来的 2 级 DOM 中移入到 Document (XML DOM)接口中。
document.getElementById属于host object,它是一个function,但是它并没有被定义在ECMAScript中而是DOM接口的一部分。
支持[[Call]](内部属性?)host object的typeof返回值就是function。请记住Host Objects并不总是遵循Native Objects的相关规则,比如typeof。
而对于testFunc它是native object, 更具体地说是native function。
下面是EcmaScript 5对于typeof操作符的返回结果的归类:

Type of val

Result

Undefined

<strong>"undefined"</strong>

Null

<strong>"object"</strong>

Boolean

<strong>"boolean"</strong>

Number

<strong>"number"</strong>

String

<strong>"string"</strong>

Object (native and does not implement [[Call]])

<strong>"object"</strong>

Object (native or host and does implement [[Call]])

<strong>"function"</strong>

Object (host and does not implement [[Call]])

Implementation-defined except may not be <strong>"undefined"</strong>, <strong>"boolean"</strong>, <strong>"number</strong>", or<strong> "string".</strong>

所以如果要实现用$代替document.getElementById需要这么做:
复制代码 代码如下:

var $ = function(id) { return document.getElementById(g) };

但是即使有了上面的解释之后,我对Host Object和Native Object又有了新的疑惑。

document.getElementById的一些细节_javascript技巧

document.getElementById的一些细节_javascript技巧

① document.getElementById 有时会抓name放过了id ,据说是IE的一个BUG;
http://community.csdn.net/Expert/topic/4223/4223888.xml?temp=.1947443

页面中有

 程序代码


[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

getElementByIdx_x js自定义getElementById函数_javascript技巧

getElementByIdx_x js自定义getElementById函数_javascript技巧

函数代码:

复制代码 代码如下:

document.getElementByIdx_x=function(id){
if(typeof id ==''string'')
return document.getElementById(id);
else
throw new error(''please pass a string as a id!'')
}

实例代码:
复制代码 代码如下:

9

<script> <BR>document.getElementByIdx_x=function(id){ <BR>if(typeof id ==''string'') <BR>return document.getElementById(id); <BR>else <BR>throw new error(''please pass a string as a id!'') <BR>} <BR>var timer = window.setInterval(function(){ <BR>document.getElementByIdx_x(''box'').innerHTML = parseInt(document.getElementByIdx_x(''box'').innerHTML) - 1; <BR>if(parseInt(document.getElementByIdx_x(''box'').innerHTML) < 0) <BR>{ <BR>window.clearInterval(timer); <BR>window.location = ''http://www.jb51.net''; <BR>} <BR>}, 1000); <BR></script>

今天的关于javascript – 使用getElementById动态创建网站?js动态创建html元素的分享已经结束,谢谢您的关注,如果想了解更多关于document.all与getElementById、getElementsByName、getElementsByTagName用法区别-getElementById_javascript技巧、document.getElementById介绍_javascript技巧、document.getElementById的一些细节_javascript技巧、getElementByIdx_x js自定义getElementById函数_javascript技巧的相关知识,请在本站进行查询。

本文标签: