document.createElement()用法及注意事項(ff下不相容)

來源:互聯網
上載者:User

今天處理了一個日期選取器的ie和ff的相容問題,本來這種情況就很難找錯誤,找了好久才把錯誤定位到js中建立元素的方法document.createElement(),這個方法在ie下支援這樣建立元素

複製代碼 代碼如下:var inputObj = document.createElement
("<input type='text' size='8' style='border:0px;border-bottom:2px solid #c0c0c0;' " readonly >");

但是這樣的情況在ff下是不相容的。
還有就是特別注意input元素的建立:與 input 有關的元素有很多,比如:checkbox、radio、submit、reset...,因此建立 input 是個很特殊的用法。

建立不同的 input 正確的做法是:

複製代碼 代碼如下:<div id="board"></div>
<script type="text/javascript">
<!--
var board = document.getElementById("board");
var e = document.createElement("input");
e.type = "radio"; //緊接著上一行寫
var obj = board.appendChild(e);
obj.checked = true;
//如下寫法也是正確的:
//e.checked = true;
-->
</script>

針對 input,在 Netscape、Opera 和 Firefox 中 e.type 既可以在 appendChild 之前,也可以在其之後。但在 IE 中 type 屬性必須在前,其它屬性必須在後。

IE 建立元素,還有一個特點,就是可以連同屬性一同建立,比如:var e = document.createElement("<input type='radio' name='r' value='1' />"); 這在其它瀏覽器中是不行的,所以我們也不支援。

總結:

•針對非 input 元素,各瀏覽器中,既可以把對元素屬性的改變寫在顯示元素(insertBefore 或 appendChild)之前,也可以在其後。
•針對 input 元素,為了相容 IE,type 屬性寫在顯示元素(insertBefore 或 appendChild)之前,其它屬性寫在其後。
推薦:

•除了 input 元素的 type 屬性寫在顯示元素(insertBefore 或 appendChild)之前外,其它屬性都寫在顯示元素之後。
•改變屬性時,對寫在顯示元素(insertBefore 或 appendChild)之前的用 createElement 的傳回值,對寫在顯示元素之後的用 insertBefore 或 appendChild 的傳回值。

複製代碼 代碼如下:1.var echkbox=document.createElement("input");
2.echkbox.setAttribute("type","checkbox");
3.echkbox.setAttribute("id","inputid");
4.echkbox.setAttribute("name","inputname");
5.echkbox.setAttribute("value","inputvalue");
6.var addhere=document.getElementById("someElementId");
7.addhere.appendChild(echkbox);
8.echkbox.setAttribute("checked","checked");
9.alert(document.getElementById("inputid").checked);

<!--document方法:
getElementById(id) 返回指定結點的引用
getElementsByTagName(name) 返迴文檔中所有匹配的元素的集合
createElement(name) 建立指定類型的新結點
createTextNode(text) 建立一個純文字結點
element方法:
getAttribute(id) 返回指定屬性的值
setAttribute(id,value) 給屬性賦值
removeAttribute(id) 移除指定屬性和它的值
getElementsByTagName(name) 返回結點內所有匹配的元素的集合
node方法:
appendChild(child) 給指定結點添加一個新的子結點
removeChild(child) 移除指定結點的子結點
replaceChild(newChild,oldChild) 替換指定結點的子結點
insertBefore(newChild,refChild) 在同一層級的結點前面插入新結點
hasChildNodes() 如果結點有子結點則返回true
node屬性:
nodeName 以字串的格式存放結點的名稱
nodeType 以整型資料格式存放結點的類型
nodeValue 以可用的格式存放結點的值
parentNode 指向結點的父結點的引用
childNodes 指向子結點的引用的集合
firstChild 指向子結點結合中的第一個子結點的引用
lastChild 指向子結點結合中的最後一個子結點的引用

動態載入js

複製代碼 代碼如下:var Rash=true;
var msg="";
function norash()
{
if (confirm("確定要取消嗎"))
Rash=false;
}
function rashit()
{
setInterval('getrss()',Inttime);
}
function getrss()
{
if (Rash==true)
{
head=document.getElementsByTagName('head').item(0);
script=document.createElement('script');
script.src='INCLUDE/AutoUpdate.asp';
script.type='text/javascript';
script.defer=true;
void(head.appendChild(script));
window.status=msg;
}
}
rashit();

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.