今天處理了一個日期選擇器的ie和ff的兼容問題,本來這種情況就很難找錯誤,找了好久才把錯誤定位到j(luò)s中創(chuàng)建元素的方法document.createElement(),這個方法在ie下支持這樣創(chuàng)建元素
var
inputObj????
=
document.createElement
???? (
"
<input type='text' size='8' style='border:0px;border-bottom:2px solid #c0c0c0;'
"
readonly >
"
);
但是這樣的情況在ff下是不兼容的。
還有就是特別注意input元素的創(chuàng)建:與 input 有關(guān)的元素有很多,比如:checkbox、radio、submit、reset...,因此創(chuàng)建 input 是個很特殊的用法。
創(chuàng)建不同的 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 創(chuàng)建元素,還有一個特點(diǎn),就是可以連同屬性一同創(chuàng)建,比如:var e = document.createElement("<input type='radio' name='r' value='1' />"); 這在其它瀏覽器中是不行的,所以我們也不支持。
總結(jié):
- 針對非 input 元素,各瀏覽器中,既可以把對元素屬性的改變寫在顯示元素(insertBefore 或 appendChild)之前,也可以在其后。
- 針對 input 元素,為了兼容 IE,type 屬性寫在顯示元素(insertBefore 或 appendChild)之前,其它屬性寫在其后。
推薦:
- 除了 input 元素的 type 屬性寫在顯示元素(insertBefore 或 appendChild)之前外,其它屬性都寫在顯示元素之后。
- 改變屬性時,對寫在顯示元素(insertBefore 或 appendChild)之前的用 createElement 的返回值,對寫在顯示元素之后的用 insertBefore 或 appendChild 的返回值。
- var echkbox=document.createElement( "input" ); ??
- echkbox.setAttribute( "type" , "checkbox" ); ??
- echkbox.setAttribute( "id" , "inputid" ); ??
- echkbox.setAttribute( "name" , "inputname" ); ??
- echkbox.setAttribute( "value" , "inputvalue" ); ??
- var addhere=document.getElementById( "someElementId" ); ??
- addhere.appendChild(echkbox); ??
- echkbox.setAttribute( "checked" , "checked" ); ??
- alert(document.getElementById( "inputid" ).checked);
<!--document方法:
getElementById(id)??????????????????????????? 返回指定結(jié)點(diǎn)的引用
getElementsByTagName(name)?????? 返回文檔中所有匹配的元素的集合
createElement(name)???????????????????????? 創(chuàng)建指定類型的新結(jié)點(diǎn)
createTextNode(text)???????????????????????? 創(chuàng)建一個純文本結(jié)點(diǎn)
element方法:
getAttribute(id)?????????????????????????????????? 返回指定屬性的值
setAttribute(id,value)???????????????????????? 給屬性賦值
removeAttribute(id)?????????????????????????? 移除指定屬性和它的值
getElementsByTagName(name)?????? 返回結(jié)點(diǎn)內(nèi)所有匹配的元素的集合
node方法:
appendChild(child)???????????????????????????? 給指定結(jié)點(diǎn)添加一個新的子結(jié)點(diǎn)
removeChild(child)???????????????????????????? 移除指定結(jié)點(diǎn)的子結(jié)點(diǎn)
replaceChild(newChild,oldChild)?????? 替換指定結(jié)點(diǎn)的子結(jié)點(diǎn)
insertBefore(newChild,refChild)?????? 在同一層級的結(jié)點(diǎn)前面插入新結(jié)點(diǎn)
hasChildNodes()???????????????????????????????? 如果結(jié)點(diǎn)有子結(jié)點(diǎn)則返回true
node屬性:
nodeName???????????????????????????????????????? 以字符串的格式存放結(jié)點(diǎn)的名稱
nodeType?????????????????????????????????????????? 以整型數(shù)據(jù)格式存放結(jié)點(diǎn)的類型
nodeValue????????????????????????????????????????? 以可用的格式存放結(jié)點(diǎn)的值
parentNode??????????????????????????????????????? 指向結(jié)點(diǎn)的父結(jié)點(diǎn)的引用
childNodes???????????????????????????????????????? 指向子結(jié)點(diǎn)的引用的集合
firstChild??????????????????????????????????????????? 指向子結(jié)點(diǎn)結(jié)合中的第一個子結(jié)點(diǎn)的引用
lastChild???????????????????????????????????????????? 指向子結(jié)點(diǎn)結(jié)合中的最后一個子結(jié)點(diǎn)的引用
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
