----------------------------------json----------------------------------------------
json是一種特殊的數據格式
Json相對于普通格式來說,只是把屬性名用雙引號包起來了(單引號不行)
在window瀏覽器中,提供了一個叫做(window.JSON)JSON的屬性,它里面提供了兩個方法:
1>JSON.parse(xxx) 在ie6~8不支持
2>JSON.stringify(xxx) 在ie6~8不支持
//1>把JSON格式的字符串轉換為JSON的對象
var str1 = '{"name":"張三","age":18}';
JSON.parse(str1);//ie6~8不支持
eval("(" + str1 + ")");//一定要記住使用eval的話,不要忘記手動加一個括號(ie6~8支持)
//2>把JSON格式的對象轉換為JSON格式的字符串
var str2 = {"name": "張三", "age": 18};
JSON.stringify(str2);//ie6~8不支持
------------------------------數據綁定以及dom回流-----------------------------------------------
第一種方式 動態創建節點和把它追加到頁面中的方式實現數據綁定
for (var i = 0; i < ary.length; i++) {
var ali1 = document.createElement('li');
ali1.innerHTML='<span>'+'0'+(i+4)+'</span>'+ary[i].name;
oul.appendChild(ali1);
}
優勢:把需要動態綁定的內容一個個的追加到頁面中,對原來的元素沒有影響
弊端:瀏覽器每當創建一個li,我們就添加到頁面中,引發一次dom的回流,最終導致回流次數過多,影響性能
第二種:字符串拼接方式:首先循環需要綁定的數據,然后把需要動態綁定的標簽以字符串方式拼接到一起,拼接完成后,最后統一添加到頁面中,工作中最常用的方式
var str = '';
for (var i = 0; i < ary.length; i++) {
str += '<li>';
str += '<span>' + '0' + (i + 4) + '</span>' + ary[i].name;
str += '</li>';
}
oul.innerHTML += str;
相當于oul.innerHTML = oul.innerHTML(把之前的三個li以字符串的方式獲取到)+str 拼接完成的整體還是字符串,最后把字符串統一的添加到了頁面中,瀏覽器還需要把字符串渲染成對應的標簽
弊端:我們把新拼接的字符串添加到ul中,原來標簽綁定事件消失了,鼠標滑過效果消失
優勢:事先把內容拼接好,最后統一添加到頁面中,只引發一次回流
第三種方式:文檔碎片
var frg = document.createDocumentFragment();//創建一個文檔碎片,相當于創建了一個容器
for (var i = 0; i < ary.length; i++) {
var ali1 = document.createElement('li');
ali1.innerHTML = '<span>' + '0' + (i + 4) + '</span>' + ary[i].name;
frg.appendChild(ali1);
}
oul.appendChild(frg);
frg = null;
js中dom深入知識(瀏覽器是如何渲染頁面的)
1、回流(重排)當頁面中的html結構發生改變(增加或者刪除元素或者位置發生改變),瀏覽器都需要重新計算一遍最新的dom結構,重新的對當前頁面進行渲染
2、重繪 某一個元素的部分樣式發生改變了(背景顏色、字體大小),瀏覽器只需要重新渲染當前元素即可
js優化性能:盡量減少回流
---------------------------------------------表格排序以及dom映射----------------------------------
表格排序:把頁面中html結構,按照某一個規律進行升降序排序
上課案例:圖1排列成圖2
css樣式略
html結構:
<ul>
<li>1</li>
<li>19</li>
<li>10</li>
<li>2</li>
</ul>
js寫法:
var oul = document.getElementsByTagName('ul')[0];
//獲取到類數組
var ali=document.getElementsByTagName('li');
//將類數組轉換為數組
var arr = utils.listToArray(ali);
// 給數組進行排序
arr.sort(function (a, b) {
return parseFloat(a.innerHTML) - parseFloat(b.innerHTML);
});
// 按照數組中的最新順序依次的把對應的li添加到頁面中
var frg = document.createDocumentFragment();
for (var i = 0; i < arr.length; i++) {
frg.appendChild(arr[i]);
}
oul.appendChild(frg);
frg = null;
頁面上為何不是8條數據?
原因:由于dom映射機制,操作的是每一個li元素對象,把li元素對象的順序追加到oul中,同時也相當于讓頁面中的li標簽的順序調整了
dom映射機制:
頁面中的標簽和js中獲取到的元素對象(元素集合)是緊緊的綁定在一起的,頁面中的html結構改變了,js中不需要重新獲取,集合里面的內容也會跟著自動改變
作業:復雜的表格排序詳見案例庫
升降序的排列規律:利用了-1*1=-1 -1*-1=1的特點
第三節 json數據綁定以及dom回流重繪、映射
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
推薦閱讀更多精彩內容
- 一、瀏覽器渲染頁過程描述 1、瀏覽器解析html源碼,然后創建一個DOM樹。 在DOM樹中,每一個HTML標簽都有...
- [00:17.17]Dans les rues de ma jeunesse, les filles, c'éta...