var ec = range.endContainer endContainer不是一个引用类型       range是引用类型
range经过改变范围之后
var ec2 =range.endContainer 这个container是一个全新的container 要重新获取,
这两个range内容已经不一样了

回车空格成为了文本节点
<p id="p1">
<b id="b1">Hello</b>
World</p>

 var p = document.getElementById("p1");
 var child = p.childNodes;
 var len = child.length;
 var a1 = child[0].nodeValue;  a1=“↵"
 var a3 = child[2].nodeValue;  a3 = "↵World"

1.selectNode
startOffset:选中节点在其父节点的字节点中索引的位置,兼容DOM的浏览器会将空格视为一个文本字节点,这个空格指索引是0的位置如果有空格就将其视为一个文本节点,在选区内部的空格不算,所以
<body> 空格                     这时startOffset是1
<p> 空格
<b>hello</b> 空格
world
</p>
</body>
<body><p>...</p></body>   这时startOffset是0
endOffset:startOffset+被选中节点的总数(从start
Offset开始到选区结尾的所有子节点个数)

commonAncestorContainer :startContainer,endContainer共同的父节点,最深的那一个,同时包含这两个节点的第一个元素

2.selectNodeCOntents
<body>
<p> 空格     这时startOffset是1
<b>hello</b> 空格
world
</p>
</body>

/*********************示例程序****************************/
window.onload = function(){
 var range = document.createRange(),
     range2 = document.createRange();
 var p = document.getElementById("p1");
 var child = p.childNodes;
 var len = child.length;
 var a1 = child[0].nodeValue;
 var a3 = child[2].nodeValue;

 range.selectNode(p);
 range2.selectNodeContents(p);
};
range:startOffset :1,endOffset:2
range2: startOffset:0,endOffset:3

<p id="p1">
<b id="b1">Hello</b>
World</p>
/*************************************************************/

range.detach();
range = null;
解除对范围的引用,使其从创建范围的文档中分离出来,从而让垃圾回收机制回收其内存

ec = range.endContainer
range.deleteContents();
range重置
以上两种情况range 发生了改变,但ec还是未改变之前的ec
range发生改变都不会影响ec和sc,因为它们是指向一个dom节点的指针,range的endContainer和startContainer会改变

sc === ec情况下,删除sc,ec并没有被删除

p =K('<P><br /></p>')
range.setStartAfter(p[0]).collapse(true);
  定位到p的前后任一位置,光标都显示

range.selectNodeContents 会添加&#8205 在表单序列化时容易出错 比如&#8205<br /> br就会被删掉
 

range精讲的更多相关文章

  1. iOS CAShapeLayer精讲

    前言 CAShapeLayer继承自CALayer,因此,可使用CALayer的所有属性.但是,CAShapeLayer需要和贝塞尔曲线配合使用才有意义. 关于UIBezierPath,请阅读文章:i ...

  2. 第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询

    第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询 1.elasticsearch(搜索引擎)的查询 elasticsearch是功能 ...

  3. 第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求

    第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求 selenium模块 selenium模块为 ...

  4. Gradle系列之一 Groovy语法精讲

    Gradle技术之一 Groovy语法精讲 gradle脚本是基于groovy语言开发的,想要学好gradle必须先要对groovy有一个基本的认识 1. Groovy特点 groovy是一种DSL语 ...

  5. 深入Java核心 Java内存分配原理精讲

    深入Java核心 Java内存分配原理精讲 栈.堆.常量池虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同.本文将深入Java核心,详细讲解Java内存分配方面的知识. Java内存分 ...

  6. WKWebView API精讲(OC)

    WKWebView API精讲(OC) 前言 鉴于LL同志对笔者说:“能不能写个OC版本的WKWebView的使用教程?”,还积极打赏了30RMB,笔者又怎么好意思拒绝呢,于是才有了下文. 所有看到本 ...

  7. 《VC++ 6简明教程》即VC++ 6.0入门精讲 学习进度及笔记

    VC++6.0入门→精讲 2013.06.09,目前,每一章的“自测题”和“小结”三个板块还没有看(备注:第一章的“实验”已经看完). 2013.06.16 第三章的“实验”.“自测题”.“小结”和“ ...

  8. iOS开发——语法篇OC篇&高级语法精讲二

    Objective高级语法精讲二 Objective-C是基于C语言加入了面向对象特性和消息转发机制的动态语言,这意味着它不仅需要一个编译器,还需要Runtime系统来动态创建类和对象,进行消息发送和 ...

  9. iOS开发——语法篇OC篇&高级语法精讲

    高级语法精讲 一.NSSet.NSMutableSet集合的介绍 1)NSSet.NSMutableSet集合,元素是无序的,不能有重复的值. 2)用实例方法创建一个不可变集合对象 例如: //宏定义 ...

随机推荐

  1. centos7下安装mysql5.7和jdk 1.8

    安装mysql5.7 具体安装过程可参见官网:A Quick Guide to Using the MySQL Yum Repository 进入/usr/local/src文件夹. cd /usr/ ...

  2. sql server 数据库基础知识(二)

    CASE函数用法1:单值判断,相当于switch caseCASE expression WHEN value1 THEN returnvalue1 WHEN value2 THEN returnva ...

  3. Windows.form增删改查

    主界面 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;usin ...

  4. Ubuntu vsftp复制文件到远端时错误,Permission denied

    Ubuntu 下复制文件到远端时错误,Permission denied 失败原因如下: (1)vsftp默认配置不允许上传文件 解决办法:修改配置文件 vi /etc/vsftpd.conf. 将& ...

  5. Yarn源码分析之MapReduce作业中任务Task调度整体流程(一)

    v2版本的MapReduce作业中,作业JOB_SETUP_COMPLETED事件的发生,即作业SETUP阶段完成事件,会触发作业由SETUP状态转换到RUNNING状态,而作业状态转换中涉及作业信息 ...

  6. html表格上下居中

    在表格外面嵌套另一个高度为 100% 的表格,外层的表格设置 td 的 valign 属性 为 middle <table width="100%" height=" ...

  7. 支付宝热补丁技术— AndFix原理[阿里Hao]

    本文由嵌入式企鹅圈原创团队成员.阿里资深project师Hao分享. 上次我们介绍了用dexposed方案实施热补丁的原理.它本质上就是hook要改动的函数.这样一来在正式版本号公布时就不能直接拿热补 ...

  8. mac - MAC电脑安装Mysql服务器和Navicat for mysql客户端

        1.下载链接 Navicat for mysql客户端 链接: https://pan.baidu.com/s/1dGbzgbR 密码: i43g Mysql服务器 链接: https://p ...

  9. okhttp 通过网关请求服务端返回数据

    1.启动类代码 package com.tycoon.service; import org.springframework.boot.SpringApplication; import org.sp ...

  10. GIT快速学习

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001373962845513ae ...