使用DOM來建立頁面元素的一些問題

來源:互聯網
上載者:User

    在IE中使用DOM方式來動態建立頁面元素的時候,我發現了一些問題。記錄於此,如果您有好的意見歡迎提供,如果您也遇到此問題,希望能有助你解決。

    對於動態HTML編程,IE實現了兩套模型:一套是以操作innerHTML為主的狹義的DHTML,一套是以集合方式操作(appendChild)頁面元素對象的DOM(Document Object Model)。DHTML方式(我本文說的DHTML都預設指的對於innerHTML進行操作的編程方式,不是廣義的DHTML。)直接操作html代碼片斷,主要靠Web程式員使用字串拼接來產生頁面元素,這是一種高效的動態網頁面操作方式,不過似乎少些編程邏輯的味道,代碼中往往散布著大量不完整的html代碼片斷。而DOM方式進行動態網頁面編程,在邏輯上是一種對集合和元素對象的操作,編程邏輯比較清晰,不過效率上有一些差別。具體使用什麼方式來實現動態Web頁面,大多數情況下是個人的喜好問題,除非在效率上必須錙銖必較。

    使用DOM,最常用的方法就是document.createElement(sTag),sTag是一個合法的html標籤名字(tagName)。我們建立好一個html元素對象後,對它的屬性進行賦值,然後insertBefore或appendChild到頁面的DOM對象樹中。這裡msdn提醒了幾個注意事項:

    1、不能通過編程方式動態建立frame和iframe元素(IE 5.0及以下);
    2、input元素被建立後預設的類型是input type='text';
    3、需要使用其他類型的input元素,需要在把input對象放入DOM對象樹之前給input.type賦予你希望的類型,否則在input insert或append進入DOM對象樹後不能再修改;
    4、button元素被建立後預設的類型是普通按鈕,要使用其它類型按鈕,需要遵循和問題3相同的注意事項;
    5、不能為通過向元素對象賦值得方式,為元素對象添加NAME屬性(這個在"細說HTML元素的ID和NAME屬性詳解"一文裡也是提過的)。
    6、sTag其實不只限於html標籤名,任何合法的html元素語句都可以。

    下面說一下我遇到的問題,當我在使用DOM方式進行動態網頁面建立的時候,發現不能使用普通的DOM方式為input type='checkbox'和input type='radio'賦初值。即下面的語句:

 var input = document.createElement('INPUT');
 input.type = 'checkbox';
 input.checked = true;
 document.body.appendChild(input);

 input = document.createElement('INPUT');
 input.type = 'radio';
 input.checked = true;
 document.body.appendChild(input);

    不能得到我期望的效果: ,而只能得到: 。

    而要得到我期望的效果,需要混合DHTML和DOM兩種方式就是說我必須在sTag裡就構建好的屬性,使用如下代碼:

 var input = document.createElement('<INPUT checked>');
 input.type = 'checkbox';
 document.body.appendChild(input);

 input = document.createElement('<INPUT checked>');
 input.type = 'radio';
 document.body.appendChild(input);

    才能得到被賦予初值得INPUT元素: 。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.