1.在html中新增加一個節點或者是改變某個節點的內容
一種是使用innerHTML(標準),用法鏈接:http://www.w3school.com.cn/jsref/prop_html_innerhtml.asp
注意:innerHTML與innerText的區別:前者的html標籤會被瀏覽器識別,後者則是當做text的,標籤不會被識別。
例子:(任務17代碼片段)
function renderAqiList() {
var itemHTML= "<tr><td>城市</td><td>空氣質量</td><td>操作</td></tr>";
for(var item in aqiData){
itemHTML+="<tr><td>" + item + "</td><td>" + aqiData[item] + "</td><td><button> \
刪除 </button></td></tr>";
}
aqitable.innerHTML=itemHTML;
}
註釋:這裏是在table裏面增加了<tr>標籤內容,渲染表格。
另外一種是使用創建節點的辦法。用法鏈接:http://www.runoob.com/jsref/met-document-createelement.html
createElement->createTextNode->appendChild(->appendChild)或者createElement->innerText(->appendChild)
例子:
<pre name="code" class="javascript"><span style="font-size:14px;">var btn=document.createElement("BUTTON");
</span>
var t=document.createTextNode("CLICK ME");btn.appendChild(t);
或者
<span style="font-size:14px;">var btn=document.createElement("BUTTON");
btn.innerText="click me";</span>
之後再把這個btn節點appendChild到需要的父節點裏。
ps:還有一種創建虛擬節點(創建文檔碎片節點)的方法createDocumentFragment()
這是考慮到當要添加大量的節點的時候,如果直接添加新節點,速度會比較慢。所以可以先創建文檔碎片,把數據一起寫入它,然後appenChild到原始html裏面。
用法與之前類似
例:(任務18代碼片段)
<pre name="code" class="javascript"><span style="font-size:14px;">
var fragment = document.createDocumentFragment();
numQueue.innerHTML="";
for (var i=0;i<arr.length;i++){
var number=arr[i];
var node = document.createElement("span");
node.innerText=number;
node.id =i;
fragment.appendChild(node);
//創建一個虛擬節點
}
numQueue.appendChild(fragment);</span>
2.關於查找節點
其實我每次解決類似的問題時,總會忘記怎麼寫,來來好好記一下。
- 關於DOM元素:parentNode,firstChild,lastChild,childNodes,insertBefore(),removeChild(),replaceChild()等等用的比較多。用法鏈接:http://www.w3school.com.cn/jsref/dom_obj_all.asp,http://www.w3school.com.cn/htmldom/dom_methods.asp
- 如果是關於table對象的:deleteRow(),insertRow()等方法,rowIndex屬性返回某一行在表格的行集合中的位置。用法鏈接http://www.w3school.com.cn/jsref/dom_obj_table.asp,http://www.w3school.com.cn/jsref/prop_tablerow_rowindex.asp
- 這裏插入一個事件代理的情況(死記吧),用法鏈接: http://blog.csdn.net/weinideai/article/details/3835839
例子(任務18代碼片段):
function randomOut(event) {
event = event||window.event;
var target = event.target||event.srcElement;
var index = target.getAttribute("id");
if(target.tagName.toLowerCase()=="span") {
// alert(target.tagName);
arr.splice(index, 1);
render();
}
return 0;
}
numQueue.onclick = randomOut;