欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Javascript標準DOM Range操作全集第3/3頁

 更新時間:2007年01月09日 00:00:00   作者:  

從Range中插入一些數(shù)據(jù)

前一節(jié)的幾個方法解決了如何移除range中所選中的fragment。現(xiàn)在說明如何添加內(nèi)容到Range中。
insertNode()方法可以插入一個節(jié)點到Range中。假如我想把以下的節(jié)點插如Range中,將如何操作呢?
<span style="color: red">Inserted text</span>

看下面的代碼:
<p id="p1"><b>Hello</b> World</p>
<script>
var oP1 = document.getElementById("p1");
var oHello = oP1.firstChild.firstChild;
var oWorld = oP1.lastChild;
var oRange = document.createRange();
var oSpan = document.createElement("span");
oSpan.style.color = "red";
oSpan.appendChild(document.createTextNode("Inserted text"));

oRange.setStart(oHello, 2);
oRange.setEnd(oWorld, 3);
oRange.insertNode(oSpan);
</script>

那么原來的HTML將會變成這樣:
<p id="p1"><b>He<span style="color: red">Inserted text</span>llo</b> World</p>

surroundContents()的參數(shù)為一個node,它將這個node加入到Range,下面看這個示例。
<p id="p1"><b>Hello</b> World</p>
<script>
var oP1 = document.getElementById("p1");
var oHello = oP1.firstChild.firstChild;
var oWorld = oP1.lastChild;
var oRange = document.createRange();
var oSpan = document.createElement("span");
oSpan.style.backgroundColor = "yellow";

oRange.setStart(oHello, 2);
oRange.setEnd(oWorld, 3);
oRange.surroundContents(oSpan);
</script>

在oRange選取的范圍內(nèi)有一個我們新生成的節(jié)點span,因此選取的Range的背景變成了黃色。

collapse()方法:

collapse()方法只有一個布爾型的參數(shù),該參數(shù)為可選的,也就是說,可以有,也可以沒有,默認為false。
true時折疊到Range邊界的首部,為false時折疊到Range尾部。即

uploads/200609/30_174339_domranges6.gif
<p id="p1"><b>Hello</b> World</p>
<script>
var oP1 = document.getElementById("p1");
var oHello = oP1.firstChild.firstChild;
var oWorld = oP1.lastChild;
var oRange = document.createRange();
oRange.setStart(oHello, 2);
oRange.setEnd(oWorld, 3);
oRange.collapse(true);
</script>

如果你想知道該Range是否已經(jīng)折疊,可以用collapsed屬性來得到true或者false??聪旅娴睦?。
<p id="p1">Paragraph 1</p><p id="p2">Paragraph 2</p>
<script>
var oP1 = document.getElementById("p1");
var oP2 = document.getElementById("p2");
var oRange = document.createRange();
oRange.setStartAfter(oP1);
oRange.setStartBefore(oP2);
alert(oRange.collapsed); //outputs "true"
</script>
上面的代碼輸為true。雖然我們沒有用collapse方法,但是由于我們的Range設(shè)置開始為1末端到p2的首端,沒有任何元素。即</p>(Range開始)(Range結(jié)束)<p id="p2">,所以顯示的是true。

Range邊界的比較

compareBoundaryPoints()方法,語法形式如下:
compare = comparerange.compareBoundaryPoints(how,sourceRange)

參數(shù)含義:
compare —— 返回1, 0, -1.(0為相等,1為時,comparerange在sourceRange之后,-1為comparerange在sourceRange之前)
how —— 為Range常數(shù):END_TO_END|END_TO_START|START_TO_END|START_TO_START
sourceRange —— 一個Range對象的邊界。

看下面的例子:
<p id="p1"><b>Hello</b> World</p>
<script>
var oRange1 = document.createRange();
var oRange2 = document.createRange();
var oP1 = document.getElementById("p1");
oRange1.selectNodeContents(oP1);
oRange2.selectNodeContents(oP1);
oRange2.setEndBefore(oP1.lastChild);
alert(oRange1.compareBoundaryPoints(Range.START_TO_START, oRange2));
//outputs 0
alert(oRange1.compareBoundaryPoints(Range.END_TO_END, oRange2));
//outputs 1;
</script>
下圖為這兩個Range的示意圖,結(jié)合代碼和上面的說明,可以清晰的分析出結(jié)果了。
uploads/200610/01_022322_domranges7.gif


克隆(clone)Range

這個操作很簡單,只需要一句語句即可:
var oNewRange = oRange.cloneRange();

cloneRange()方法將返回一個當前Range的副本,當然,它也是Range對象。

清除Range所占的系統(tǒng)資源

當你創(chuàng)建了Range對象最好用detach()方法來清除它所占的系統(tǒng)資源。雖然不清除,GC(垃圾收集器)也會將其收集,但用detach()釋放是一個好習(xí)慣。語法為:
oRange.detach();

下面一個示例在Mozilla中,利用Range可以模擬出IE中的element.insertAdjacentHTML()方法,
if (browser.isMozilla) {
 HTMLElement.prototype.insertAdjacentHTML = function (sWhere, sHTML) {
 var df; var r = this.ownerDocument.createRange();
 switch (String(sWhere).toLowerCase()) {
 case "beforebegin":
 r.setStartBefore(this);
 df = r.createContextualFragment(sHTML);
 this.parentNode.insertBefore(df, this);
 break;
 case "afterbegin":
 r.selectNodeContents(this);
 r.collapse(true);
 df = r.createContextualFragment(sHTML);
 this.insertBefore(df, this.firstChild);
 break;
 case "beforeend":
 r.selectNodeContents(this);
 r.collapse(false);
 df = r.createContextualFragment(sHTML);
 this.appendChild(df);
 break;
 case "afterend":
 r.setStartAfter(this);
 df = r.createContextualFragment(sHTML);
 this.parentNode.insertBefore(df, this.nextSibling);
 break;
 }
 };
}
參考文檔:

Professional JavaScript for Web Developers(Wrox)
Mozilla Develop Center Document

相關(guān)文章

  • js轉(zhuǎn)義字符介紹

    js轉(zhuǎn)義字符介紹

    有時候js得到j(luò)son串中含有"<"和">" ,那么兩個尖括號中間的文字是無法在html頁面顯示出來的,必須用轉(zhuǎn)義字符
    2013-11-11
  • javascript 數(shù)組的正態(tài)分布排序的問題

    javascript 數(shù)組的正態(tài)分布排序的問題

    這篇文章主要介紹了javascript 數(shù)組的正態(tài)分布排序的問題的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • javascript深拷貝的幾種情況總結(jié)

    javascript深拷貝的幾種情況總結(jié)

    這篇文章主要為大家介紹了javascript深拷貝的幾種情況,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 淺談JavaScript編程語言的編碼規(guī)范

    淺談JavaScript編程語言的編碼規(guī)范

    本文淺談 JavaScript 編程中關(guān)于編碼規(guī)范的問題,分析其中緣由。希望引起更多 Web 開發(fā)人員對 JavaScript 編碼規(guī)范問題的關(guān)注和對軟件產(chǎn)品質(zhì)量問題的重視
    2011-10-10
  • 淺析JS原型繼承與類的繼承

    淺析JS原型繼承與類的繼承

    下面小編就為大家?guī)硪黄獪\析JS原型繼承與類的繼承。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-04-04
  • JavaScript閉包詳解

    JavaScript閉包詳解

    本文詳細介紹了javascript閉包,十分的詳盡,推薦給有需要的小伙伴參考下。
    2015-02-02
  • JS方法調(diào)用括號的問題探討

    JS方法調(diào)用括號的問題探討

    JS方法調(diào)用括號的問題很是令人頭疼,下面有個不錯的示例,感興趣的朋友可以參考下
    2014-01-01
  • JavaScript數(shù)據(jù)類型判定的總結(jié)筆記

    JavaScript數(shù)據(jù)類型判定的總結(jié)筆記

    這篇文章主要給大家分享的是JavaScript數(shù)據(jù)類型判定,感興趣的朋友可以參考下
    2015-07-07
  • 前端?el-table?本地搜索的實現(xiàn)代碼

    前端?el-table?本地搜索的實現(xiàn)代碼

    這篇文章主要介紹了前端?el-table?本地搜索的實現(xiàn)代碼,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • 三張圖帶你搞懂JavaScript的原型對象與原型鏈

    三張圖帶你搞懂JavaScript的原型對象與原型鏈

    這篇文章介紹了JavaScript的原型對象與原型鏈,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07

最新評論