好長時間有沒有寫部落格了,從今天起我的部落格之路繼續了,嘿嘿下面我們接著旅程3繼續我們的Dom征程4,這篇博文講的是Dom的動態建立。
- Dom的動態建立
(1) document.write只能在頁面載入過程中才能動態建立
(2) 可以調用document的createElement方法來建立具有指定標籤的Dom對象,然後通過調用某個元素的appendChild方法將新建立的元素添加到相應的元素下。
<script type="text/javascript">
function btnClick() {
var divMain = document.getElementById("divMain"); //獲得層
var input = document.createElement("input");
input.value = "我的動態按鈕";
input.type = "button";
divMain.appendChild(input); //將產生的元素添加到divMain層
}
</script>
<body>
<div id="divMain"></div>
<input type="button" value="點擊" onclick="btnClick()" />
</body>
(3)innerText,innerHTML
1) 幾乎所有的Dom元素都有innerText,innerHTML 屬性(注意大小寫),分別是元素標籤內容的文本表示形式和HTML原始碼,這兩個屬性是可讀可寫的。
<a href="http://www.baidu.com" id="link1">百<font color="red">度</font></a>
<input type="button" value="inner" onclick="alert(document.getElementById('link1').innerText);alert(document.getElementById('link1').innerHTML);" />
<input type="button" value="innerText" onclick="document.getElementById('link1').innerText='百度'" />
<input type="button" value="innerHTML" onclick="document.getElementById('link1').innerHTML='<font color='Yellow'>部落格園</font>'" />
2) 用innerHTML也可以替代createElement,屬於簡單粗放型。
<script type="text/javascript">
function createInput() {
var divMain = document.getElementById("divMain");
divMain.innerHTML = "<input type='button' value='按鈕' />";
}
</script>
<div id="divMain"></div>
<input type="button" value="動態建立" onclick="createInput()" />
注釋:這個動態建立按鈕只能建立一個按鈕,不能重複的建立。
練習1:點擊按鈕增加一個網站的超連結
<script type="text/javascript">
function createLink() {
var divMianLink = document.getElementById("divMainlink");
var link = document.createElement("a");
link.href = "http://www.cnblogs.com";
link.innerText = "百度 ";
divMainlink.appendChild(link);
}
</script>
<div id="divMainlink"></div>
<input type="button" value="產生" onclick="createLink()" />
練習2:點擊按鈕動態增加網站列表,分兩列,第一列為網站的名字,第二列為帶網站超連結的的網站名,增加三行常見網站。
<script type="text/javascript">
function loadData() {
var data = { "百度": "http://www.baidu.com", "部落格園": "http://www.cnblogs.com", "新浪": "http://www.sina.com" };
var tableLinks = document.getElementById("tableLinks");
for (var key in data) {
var value = data[key];
var tr = document.createElement("tr");
var td1 = document.createElement("td"); //先建立td,放入內容,在加入tr
td1.innerText = key;
tr.appendChild(td1);
var td2 = document.createElement("td");
td2.innerHTML = "<a href='" + value + "'>" + value + "</a>";
tr.appendChild(td2);
tableLinks.appendChild(tr);
}
}
</script>
<table id="tableLinks"></table>
<input type="button" value="載入" onclick="loadData()" />
注釋:動態產生的元素,查看原始碼是看不到的,通過F12開發人員工具或者DebugDar—>Dom—>文檔—>HTML可以看到。
注釋:瀏覽器安全色性的例子,ie6,ie7不支援table.appendChild(“tr”).
詳註:瀏覽器安全色新問題
(1) 瀏覽器安全色性的例子,ie6,ie7對table.appendChild(“tr”)的支援和IE8不一樣,用insertRow,insertCell來代替或者為表格添加tbody,然後向tbody中添加tr,FF不支援innerText。所以動態載入網站的列表程式修改為:
var tr = tableLinks2.insertRow(-1);
var td1 = tr.insertCell(-1);
td1.innerText = key;
var td2 = tr.insertCell(-1);
td2.innerHTML = "<a href='" + value + "'>" + value + "</a>";
或者<table id=”tableLinks”>
<tbody></tbody> </table>
然後tableLinks.tBodies[0].appendChild(tr);
重寫上述案例:代碼如下
function loadData1() {
var data = { "百度": "http://www.baidu.com", "部落格園": "http://www.cnblogs.com", "新浪": "http://www.sina.com" };
var tableLinks = document.getElementById("tableLinks2");
for (var key in data) {
var value = data[key];
var tr = tableLinks2.insertRow(-1);
var td1 = tr.insertCell(-1);
td1.innerText = key;
var td2 = tr.insertCell(-1);
td2.innerHTML = "<a href='" + value + "'>" + value + "</a>";
}
}
<table id="tableLinks2"></table>
<input type="button" value="相容IE6,7載入" onclick="loadData1()" />
練習3:練習點評無重新整理評論。
<script type="text/javascript">
function addComment() {
var nickname = document.getElementById("nickname").value;
var comment = document.getElementById("comment").value;
var tableComment = document.getElementById("tableComment");
var tr = document.createElement("tr");
var tdnickName = document.createElement("td");
tdnickName.innerText = nickname;
tr.appendChild(tdnickName);
var tdCommnent = document.createElement("td");
tdCommnent.innerText = comment;
tr.appendChild(tdCommnent);
tableComment.tbodies[0].appendChild(tr);
}
</script>
<p>評論區</p>
<table id="tableComment">
<tbody> </tbody>
</table>
暱稱:<input type="text" id="nickname" /><br />
內容:<textarea id="comment"></textarea><br />
<input type="button" value="評論" onclick="addComment()" />