js有關元素內容操作小結

來源:互聯網
上載者:User

1.innerHTML
這個大家一定都很熟悉,可讀可寫,修改元素內容相當快捷方便,在相容問題上可以參考W3Help中一個知識記錄。

2.outerHTML
此方法可以用於對元素自身的快速替換,比如:
複製代碼 代碼如下:
<p id="hello">Hello, I am a demo</p>
$('hello').outerHTML = '<p>Hello, I am a replacement</p>';

遺憾的是,firefox目前還不支援(我當前用firefox8),其他瀏覽器支援的還不錯,在ff中可以用innerHTML來類比實現。

3.documentFragment
DocumentFragment能實現高效率的DOM節點插入操作,我們可以建立一個DocumentFragment。

var docFragment = document.createDocumentFragment();

它支援元素節點的appendChild方法,可以利用它進行追加節點,相當於記憶體中的一個臨時空間, 然後一次性加入DOM Tree中,較少瀏覽器相關的reflow和repaint事件,在之前的博文中有提到。

4.insertAdjacentHTML
這個方法很有意思,是IE4最先引入的,目前也寫入了HTML5標準,目前所有瀏覽器都支援,ff是8才剛開始支援的。 它能夠實現在元素的裡外,共4個地方靈活的新增內容,例如:

複製代碼 代碼如下:
<!-- beforebegin --><p id="test"><!-- afterbegin -->hello, I am a demo.<!-- beforeend--></p><!-- afterend-->
$('test').insertAdjacentHTML('beforebegin', /* your content here */);

這確實很cool不是麼,但遺憾的是,IE自己引入,確在IE6~8的版本中存在不少bug,比如我測試中遇到如果元素是div的話, 能夠在四個地方,都能順利插入內容,這是我們所預期的,但是我換成p元素的話,‘beforebegin'和‘afterend'就會報錯, 它變得只支援p外部的內容插入,不允許插入到p的內部,還有tr,td不支援此方法等各種bug。IE9測下來,表現預期。 關於這個方法jQuery之父,有篇部落格有講,感興趣的可以稍微參考下http://ejohn.org/blog/dom-insertadjacenthtml/

5.textContent
這個是針對元素中的常值內容的操作,提取元素本身和其子項目中常值內容,這個用的頻率不是很高,但還是要知道下, 比如:

複製代碼 代碼如下:
<div id="test"><p>whatever, blah blah.</p>hello,I am a <em>Demo</em></div>
$('test').textContent //whatever, blah blah.hello, I am a Demo

把文本直接連接起來。IE9+和其他瀏覽器都很好的支援此方法。

6.innerText
這個也是由IE最初引入的,除了firefox,目前其他瀏覽器也都支援,但是結果有些微妙的不同。在opera中,結果和textContent一致,在chrome中,與包含該文本元素的樣式有關。在IE9中,與包含該文本元素的樣式有關。 事實上,innerText和textContent看似差不多,但還是有一些值得注意的不同之處。 具體MDN上有一定的說明:

1.textContent能夠擷取script,style元素中得文本。innerText不行

2.innerText結果跟樣式有關,不能擷取隱藏元素的常值內容,textContent則不受限制

3.innerText會觸發瀏覽器內部的reflow事件,而textContent不會,這個對效率有點影響。

當然對於IE6~8,我們可以比較容易地通過遍曆節點來實現textContent的效果。如犀牛書中所給出的解決方案:

複製代碼 代碼如下:
function textContent(e) {
var child, type, s = []; // s holds the text of all children
for(child = e.firstChild; child != null; child = child.nextSibling) {
type = child.nodeType;
if(type === 3 || type === 4) { //Text and CDATASection nodes
s.push(child.nodeValue);
} else if(type === 1) {
s.push(textContent(child));
}
return s.join('');
}
}

聯繫我們

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