1.2.8  html5编辑api之range对象(一)

1.2.8.1  Range 对象基本概念

  Range 对象的基本概念,通过使用 Range 对象所提供的方法实现一个鼠标选取内容,通过点击按钮打印出选中内容,当然注意在不同的浏览器下可选中的内容数量是不同的。

<script>
function rangeTest() {
var html;
showRangeDiv = document.getElementById("showRange");
selection = document.getSelection();
if(selection.rangeCount > 0){
html = "您选取了" + selection.rangeCount + "块内容<br/>"
for(var i = 0; i < selection.rangeCount; i++){
var range = selection.getRangeAt(i);
html += "第" +(i+1) + "段内容为:" + range + "<br/>"
}
showRangeDiv.innerHTML = html;
}
}
// chrome浏览器中只能选取一块内容,火狐浏览器中可以通过按command键
// 选取多块选区。
</script>
select对象与Range对象的使用
<input type="button" value="点击我" onclick="rangeTest()">
<div id="showRange"></div>
<hr/>

1.2.8.2  Range方法之SelectNode等方法

  Range 对象方法,包含 SelectNode、SelectNodeContents、deleteContents 方法,通过实例来了解每一个方法的使用。

<script>
function deleteRangeContent(onlyContent){
var div = document.getElementById("divTest");
var rangeObj = document.createRange();
if(onlyContent){
rangeObj.selectNodeContents(div);
//直选中节点内的内容;
rangeObj.deleteContents();
//删除选中的内容;
}else{
rangeObj.selectNode(div);
//选中整个节点
rangeObj.deleteContents();
}
}
</script>
<div id="divTest" style=" width: 200px; height: 100px;">元素中的内容</div>
<button onclick="deleteRangeContent(true)" >删除内容</button>
<button onclick="deleteRangeContent(false)" >删除元素</button>
<!--button标签没有value属性,使用了不管用,input类型为button之后才有value属性-->

1.2.8.3  Range方法之setStartsetEnd等方法

  Range 对象方法,包含 setStart、setEnd、setStartBefore、setStartAfter、setEndBefore、setEndAfter 方法。

<script>
function deleteChar(){
var div = document.getElementById("myDiv");
// var textNode = div.firstChild;
var textNode = div.firstChild;
//firstChild返回的是一个节点,内容是一段字符
var rangeObj = document.createRange();
rangeObj.setStart(textNode,1);
//数字1是偏移量
rangeObj.setEnd(textNode,2);
rangeObj.deleteContents(); }
</script>
<div id="myDiv"style="color:red">这段文字是用来测试删除的
</div>
<!--setStart会识别初div中的空格,卧槽。。。半个小时搞这个。。。醉了
而且节点是从0开始的,一个汉字就是一个节点-->
<button onclick="deleteChar()">删除文字</button>
<script>
function deleteRow() {
var table = document.getElementById("myTable");
if(table.rows.length > 0){
var row = table.rows[0];
var rangeObj = document.createRange();
rangeObj.setStartBefore(row);
rangeObj.setEndAfter(row);
//顾名思义看英语
rangeObj.deleteContents();
}
}
</script>
<table id="myTable" border="5px" cellpadding="0" cellspacing="10">
<!--cellpadding:表格内部文字与单个表格边框的距离
cellspacing:table的边界内部与内容的距离-->
<tr>
<td>内容1</td>
<td>内容2</td>
</tr>
<tr>
<td>内容3</td>
<td>内容4</td>
</tr>
</table>
<button onclick="deleteRow()">删除第一行</button>

1.2.9  HTML5 编辑 API 之 Range 对象(二)

1.2.9.1  Range 对象方法

  通过使用 Range 对象的方法来进行复制、追加、克隆等操作。通过简单地标签,来了解 Range 对象提供的方法的使用。

克隆range对象

<script>
function cloneRange(){
var rangeObj = document.createRange();
rangeObj.selectNodeContents(document.getElementById("p"));
var rangeClone = rangeObj.cloneRange();
alert(rangeClone.toString());
}
</script>
<p id="p">这是随便书写的一段内容</p>
<button onclick="cloneRange()">克隆</button>

克隆内容

<script>
function cloneContent(){
var div = document.getElementById("div");
var rangeObj = document.createRange();
rangeObj.selectNodeContents(div);
var docFrangment = rangeObj.cloneContents();
div.appendChild(docFrangment);
}
</script>
<div id="div">这是随便书写的一段内容
<br/>
<button onclick="cloneContent()">克隆</button>
<br/>
</div>

移动内容

<script>
function moveContent(){
var srcDiv = document.getElementById("srcDiv");
var disDiv = document.getElementById("disDiv");
var rangeObj = document.createRange();
rangeObj.selectNodeContents(srcDiv);
var docFragment = rangeObj.extractContents();
disDiv.appendChild(docFragment);
// 将srcDiv中的元素移动到disDiv中;
}
</script>
<div id="srcDiv" style="width:300px;height:20px;">你好吗?</div>
<div id="disDiv" style="width:300px;height:20px;"></div>
<button onclick="moveContent()">移动</button>

1.2.9.2  Range 对象方法之 insertNode、compareBoundaryPoints 方法

  通过使用 Range 对象的方法 insertNode 来进行指定节点插入某个 Range 对象所代表的区域中插入位置为 Range 对象所代表的区域的起点位置。使用 compareBoundaryPoints 方法来比较两个 Range 对象的起点位置或终点位置。

<script>
function moveButton(){
var btn = document.getElementById("button");
var selection = document.getSelection();
if(selection.rangeCount > 0){
// alert(selection.rangeCount);
var range = selection.getRangeAt(1);
//必须选中两块才会显示第1这个,初始是0;
range.insertNode(btn);
}
}
</script>
<div onmouseup="moveButton()" style="width:400px;">这里是我随便书写的一段文字这里是我随便书写的一段文字这里是我随便书写的一段文字
</div>
<button id="button">插入按钮</button>

1.2.9.3  Range 对象方法之 collapse、detach 方法

  Range 对象方法之 collapse 和 detach。通过使用 collapse 方法将 Range 对象所代表的区域的终点移动到该区域的起点处,或将 Range 对象所代表区域的起点移动到终点出。

<script>
var rangeObj = document.createRange();
function selectRangeContents(){
var div = document.getElementById("div");
rangeObj.selectNode(div);
// rangeObj.detach();
// 将range对象释放掉
}
function unselect(){
rangeObj.collapse(false);
// Range.collapse() 方法向边界点折叠该 Range 。
// 折叠后的 Range 为空,不包含节点内容。
// specifying a single-point in a DOM tree.
// 要确定 Range 是否已折叠,使用Range.collapsed 属性。
}
function showRange(){
alert(rangeObj.toString());
}
</script>
<div id="div" style="width:300px;height:20px;">元素中的内容!</div>
<button onclick="selectRangeContents()">选择元素</button>
<button onclick="unselect()">取消元素</button>
<button onclick="showRange()">显示range内容</button>

web前端学习(二)html学习笔记部分(3)--range对象的更多相关文章

  1. Web前端与移动开发学习路线图

    文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 这里整理的Web前端与移动开发学习路线图包含初中级两个部分,你可以通过百度云盘下载观看对应的视频 链接: http://pan.ba ...

  2. 想做web前端project师应该学习些什么?

    偶然间看到这篇文章.感觉博主写的挺不错的,假设你想做web前端project师的话,建议您阅读下面这篇文章,事实上web前端project师所做的工作事实上就是站点设计,有些小公司的美工事实上就是做w ...

  3. 最全的WEB前端开发程序员学习清单

    史上最全的WEB前端开发程序员学习清单! 今天为什么要给大家分享这篇文章呢,我发现最近来学前端的特别多,群里面整天都有人问:前端好找工作吗?前端要怎么学啊?前端工资怎么样?前端XX,前端XXX,虽然我 ...

  4. web前端开发控件学习笔记之jqgrid+ztree+echarts

    版权声明:本文为博主原创文章,转载请注明出处.   作为web前端初学者,今天要记录的是三个控件的使用心得,分别是表格控件jqgrid,树形控件ztree,图表控件echarts.下边分别进行描述. ...

  5. 2022年Web前端开发流程和学习路线(详尽版)

    前言 前端侧重于人机交互和用户体验,后端侧重于业务逻辑和大规模数据处理.理论上,面向用户的产品里,所有问题(包括产品.设计.后端.甚至看不见的问题)的表现形式,都会暴露在前端,而只有部分问题(数据问题 ...

  6. web前端零基础入门学习!前端真不难!

    现在互联网发展迅速,前端也成了很重要的岗位之一,许多人都往前端靠拢,可又无能为力,不知所措,首先我们说为什么在编程里,大家都倾向于往前端靠呢?原因很简单,那就是,在程序员的世界里,前端开发是最最简单的 ...

  7. 最适合2018年自学的web前端零基础系统学习视频+资料

    这份资料整理花了近7天,如果感觉有用,可以分享给更有需要的人. 在看接下的介绍前,我先说一下整理这份资料的初衷: 我的初衷是想帮助在这个行业发展的朋友和童鞋们,在论坛博客等地方少花些时间找资料,把有限 ...

  8. 史上最全的web前端开发程序员学习清单!

    今天为什么要给大家分享这篇文章呢,我发现最近来学前端的特别多,群里面整天都有人问:前端好找工作吗?前端要怎么学啊?前端工资怎么样?前端XX,前端XXX,虽然我回答过无数次这种问题了,但是问这个的还是有 ...

  9. WEB 前端模块化,读文笔记

    文章链接 WEB 前端模块化都有什么? 知识点 根据平台划分 浏览器 AMD.CMD 存在网络瓶颈,使用异步加载 非浏览器 CommonJS 直接操作 IO,同步加载 浏览器 AMD 依赖前置 req ...

  10. web前端——Vue.js基础学习

    近期项目的前端页面准备引入Vue.js,看了网上一些简介,及它和JQuery的对比,发现对于新入门的前端开发来说,Vue 其实也是比较适用的一个框架,其实用性不比JQuery差,感觉还挺有意思,于是研 ...

随机推荐

  1. vue表格之:formatter=fun

    作用:对从数据库中取出的数据进行处理后展示. 示例1: partner1为从数据库中查询出的展示字段,值为数字id,需要转化成中文名称 partners为全量查询结果,包含了id与中文名称的一一对应关 ...

  2. hive新加入字段插入数据需要注意事项

    hive中新加字段需要注意如下 1)如果表中有分区字段,必须先删除分区才能插入数据否则为null; 2)insert override TABLE table1 select counm1,counm ...

  3. C开发系列-函数

    概述 任何一个C语言程序都是有一个或多个程序段(小程序构成).每个程序都有自己的功能,我们一般称这些程序段为"函数". 函数的执行过程 #import <Foundation ...

  4. 2018-8-10-WPF-鼠标移动到列表上-显示列表图标

    title author date CreateTime categories WPF 鼠标移动到列表上 显示列表图标 lindexi 2018-08-10 19:16:51 +0800 2018-2 ...

  5. 打开springboot的run dashboard

    默认情况下,idea的run dashboard是关闭的,当检测到你有多个springboot项目时会弹出提示框,询问是否打开. 如果我们想要自己打开,需要修改配置. 在你的idea的项目目录中,有一 ...

  6. 如何做系列(4)-微博URL短网址生成算法原理(java版、php版实现实例)

    短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代 ...

  7. js的简单介绍和相关的必备常识

    一.概念 1.js是JavaScript的缩写,是运行在浏览器端或服务端的依附于页面的脚本语言. 2.js的学习分为:ECMA语法.Dom网页对象模型.Bom浏览器的对象模型 3.ECMA是浏览器厂商 ...

  8. #include <filename.h> 和 #include“filename.h” 有什么区别

    对于#include <filename.h> ,编译器从标准库路径开始搜索filename.h,对于#include “filename.h” ,编译器从用户的工作路径开始搜索filen ...

  9. 【HTML5】如何处理HTML5新标签的浏览器兼容版问题

    HTML5规范毕竟是刚刚才定义完成的规范,还有一些浏览器并不能支持其中的新标签和新属性,尤其是IE8及以下版本浏览器.以下介绍一些在页面中使用HTML5新标签的实践方法,目的是让HTML5中的新标签在 ...

  10. Java虚拟机系列(一)---Java内存划分

    Java和C++之间有一堵由内存管理和垃圾收集技术所围成的“高墙”,墙外的人想进去,墙内的人却想出来.  ------摘自<深入理解Java虚拟机> 作为一个Java程序员,因为虚拟机的好 ...