可惜的是,没有对应的collapsed属性让我们知道范围是否已经折叠完毕。为此,必须使用boundingWidth属性,该属性返回范围的宽度(以像素为单位)。如果boundingwidth属性等于0,就说明范围已经折叠了
var isCollapsed = (range.boundingWidth == 0);
此外,还有boundingHeight、boundingLeft和boundingTop等属性,虽然它们都不像boundingWidth那么有用,但也可以提供一些有关范围位置的信息
五、比较IE范围
【compareEndPoints()】
IE中的compareEndPoints()方法与DOM范围的compareBoundaryPoints()方法类似。这个方法接受两个参数:比较的类型和要比较的范围。比较类型的取值范围是下列几个字符串值:"StartToStart"、"StartToEnd"、"EndToEnd"和"EndToStart"。这几种比较类型与比较DOM范围时使用的几个值是相同的
同样与DOM类似的是,compareEndPoints()方法也会按照相同的规则返回值,即如果第一个范围的边界位于第二个范围的边界前面,返回-1;如果二者边界相同,返回0;如果第一个范围的边界位于第二个范围的边界后面,返回1。仍以前面的Hello World代码为例,下列代码将创建两个范围,一个选择"Hello world!"(包括<b>标签),另一个选择"Hello"
var range1 = document.body.createTextRange(); var range2 = document.body.createTextRange(); range1.findText("Hello world!"); range2.findText("Hello"); alert(range1.compareEndPoints("StartToStart", range2)); //outputs 0 alert(range1.compareEndPoints("EndToEnd", range2)); //outputs 1;
由于这两个范围共享同一个起点,所以使用compareEndPoints()比较起点返回0。而range1的终点在range2的终点后面,所以compareEndPoints()返回1
IE中还有两个方法,也是用于比较范围的:isEqual()用于确定两个范围是否相等,inRange()用于确定一个范围是否包含另一个范围。
下面是相应的示例
var range1 = document.body.createTextRange(); var range2 = document.body.createTextRange(); range1.findText("Hello world!"); range2.findText("Hello"); alert("range1.isEqual(range2): " + range1.isEqual(range2));//false alert("range1.inRange(range2): " + range1.inRange(range2));//true
这个例子使用了与前面相同的范围来示范这两个方法。由于这两个范围的终点不同,所以它们不相等,调用isEqual返回false。由于range2实际位于rangel内部,它的终点位于后者的终点之前、起点之后,所以range2被包含在rangel内部,调用inRange()返回true
六、复制IE范围
在IE中使用duplicate()方法可以复制文本范围,结果会创建原范围的一个副本,如下所示
var newRange = range.duplicate();
新创建的范围会带有与原范围完全相同的属性