JS与CSS阻止元素被选中及清除选中的方法总结

摘要:
有时候,我们希望阻止用户选中我们指定区域的文字或内容。即在body标签中添加如下:使用JS阻止整个网页的内容被选中document.body.onselectstart=function(){returnfalse;};//或document.body.onmousedown=function(){returnfalse;}阻止特定区域的内容被选中varelem=document.getElementById;elem.onselectstart=function(){returnfalse;};使用CSS控制样式阻止内容被选中仅支持IE10及以上的高版本浏览器。规定该事件发生时执行的JavaScript。

有时候,我们希望阻止用户选中我们指定区域的文字或内容。

举个栗子,有时候用户在一个区域执行频繁的点击操作,一不小心傲娇地点多了,就会选中当前区域的内容。

再举个栗子,制作轮播组件的时候,点击下一页,若点击的快的话,浏览器会识别为双击。

双击的默认效果是选中整片区域,这时候轮播图组件就会被表示忧郁的蓝色幕布盖住,多忧桑啊~

JS与CSS阻止元素被选中及清除选中的方法总结第1张

你看,这妹子多赞啊,可是你一紧张就乱点下一张的话,就变成酱紫了:

JS与CSS阻止元素被选中及清除选中的方法总结第2张

不过别怕,给这个现代化浏览器说好了咱不要这种忧桑色调就可以了:

.pretty-girl {
    -webkit-user-select:none;     
}

可是!可是!不是每个浏览器都可以不忧桑!!!那就只能请脚本大王出山了。

阻止选中

有时候,我们需要禁止用户选中一些文本区域,这时候可以直接通过让 onselectstart 事件 return false 来实现。即在body标签中添加如下:

<body onselectstart="return false">

使用 JS 阻止整个网页的内容被选中

document.body.onselectstart = function() { 
    return false; 
};
//
document.body.onmousedown = function() { 
    return false; 
}

阻止特定区域的内容被选中

var elem = document.getElementById('elemId');
elem.onselectstart = function() {
    return false;
};

使用 CSS 控制样式阻止内容被选中

仅支持IE10及以上的高版本浏览器。IE9 以下请使用 onselectstart="return false;" 的方式来实现。

.unselect {
    -webkit-user-select:none;
    -moz-user-select:none;
    -khtml-user-select:none;
    -ms-user-select:none;    
    /*以下两个属性目前并未支持,写在这里为了减少风险 */
    -o-user-select:none;
    user-select:none;  
}

user-select: auto; => 用户可以选中元素中的内容

user-select: none; => 用户不可选中元素中的内容

user-select: text; => 用户可以选中元素中的文字

目前这个 user-select 兼容 Chrome 6+、Firefox、IE 10+、Opera 15+、Safari 3.1+。

需要注意的是,这个 user-select 还带浏览器厂商前缀,意味着她们还是非标准的,将来可能会改变。在生产环境中要慎用。

清除选中

有时候用户选中文字进行复制后,我们使用手动的方式进行选中的清除。

先来搞懂几个小知识点

1.获取选中的文字

document.selection.createRange().text; IE9以下使用

window.getSelection().toString(); 其他浏览器使用

$('p').mouseup(function(){
    var txt = window.getSelection ?window.getSelection().toString() : document.selection.createRange().text;
    alert(txt) ;
})

2.取消处于选中状态的文字

document.selection.empty(); IE9以下使用

window.getSelection().removeAllRanges(); 其他浏览器使用

$('p').mouseup(function(){
    window.getSelection ?window.getSelection().removeAllRanges() : document.selection.empty();
})

3.使某Dom中的文字处于选中状态

$('.somedom').click(function(){
    this.focus();    
    if(window.getSelection){
        var range=document.createRange();
        range.selectNodeContents(this);
        var selection =window.getSelection();
        selection.removeAllRanges();
        selection.addRange(range);            
        }
    else if(document.selection){
        //for ie
        var range=document.body.createTextRange()
        range.moveToElementText(this)
        range.select();
    }  
})

使用 JS 清除选中

functionclearSelections () {
    if(window.getSelection) {
        //获取选中
        var selection =window.getSelection();
        //清除选中
selection.removeAllRanges();
    } else if (document.selection &&document.selection.empty) {
       //兼容 IE8 以下,但 IE9+ 以上同样可用
document.selection.empty();
        //或使用 clear() 方法
        //document.selection.clear();
}       
}

使用 CSS 清除选中

不考虑低版本 IE 的情况下,我们简单给选中元素添加以上 .unselect 的样式即可。

扩展onselect 事件

定义与用法:onselect 事件会在文本框中的文本被选中时发生。

语法:

onselect="SomeJavaScriptCode"

其中参数SomeJavaScriptCode为必需。规定该事件发生时执行的 JavaScript。

支持该事件的 HTML 标签:

<input type="text">, <textarea>

支持该事件的 JavaScript 对象:window

实例1

在本例中,当用户试图选择文本框中的文本时,会显示一个对话框:

<form>
Select text: <input type="text"value="Hello world!"
onselect="alert('You have selected some of the text.')" />
<br /><br />
Select text: <textarea cols="20"rows="5"
onselect="alert('You have selected some of the text.')">
Hello world!</textarea>
</form>

实例2

<input type="text"value="选中的内容"id="text"/>

JS方法:

var text = document.querySelector('#text');
text.addEventListener('select',function(e){
    console.log(e.target.value); //选中的内容
})

参考

MDN user-select

https://segmentfault.com/a/1190000000638651

免责声明:文章转载自《JS与CSS阻止元素被选中及清除选中的方法总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇图灵完备macos 签名+公证app生成dmg后,安装使用过程中崩溃下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL这样干,你就是给自己刨坑.....

SQL是作为一个程序员接触得非常多的一种语言,但是,很多时候,我们会发现,有些SQL的执行效率异常的差,造成了数据库的负担。我们通过分析这些有问题的SQL,就可以发现很多我们平时在写SQL的时候忽略的问题。 今天,我们就来讲一下这些需要改掉的坏习惯。 尽量少用负向条件查询 假设我们有一个Order表,表中有一个字段是Status,这个字段有4个值,分别是0...

Oracle和SQL server查询数据库中表的创建和最后修改时间

有时候我们需要查看下数据数据库中表的创建时间和最后修改时间,可以通过以下语句实现; Oracle数据库 -- 查看当前用户下的表 SELECT * FROM USER_TABLES -- 查看数据库中所有的表 SELECT * FROM DBA_TABLES -- 查看所有表的创建和最后修改时间 SELECT OBJECT_NAME, CREATED,...

Oracle用户,权限,角色以及登录管理 scoot 授权

Oracle用户,权限,角色以及登录管理 1. sys和system用户的区别 system用户只能用normal身份登陆em。除非你对它授予了sysdba的系统权限或者syspoer系统权限。sys用户具有“SYSDBA”或者“SYSOPER”权限,登陆em也只能用这两个身份,不能用normal。 -- 最重要的区别,存储的数据的重要性不同 sys所有...

webpack4多页应用HTML按需添加入口依赖chunk【html-webpack-plugin &amp;amp; html-inline-entry-chunk-plugin】

在webpack4中使用splitChunkPlugin时,根据需要将公共代码拆分为多个依赖后,需要在创建htmlWebpackPlugin时候按需引入对应入口文件依赖的chunk。但是html-webpack-plugin的chunk配置项只能手动添加,在没有得知拆分后的chunk情况下,无法得知对应html的依赖chunk,也就无法按需做引入。 因此鄙...

mybatis 批量插入和where条件使用

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespac...

CSS笔记(十五)CSS3之用户界面

参考:http://www.w3school.com.cn/css3/css3_user_interface.asp 在 CSS3 中,新的用户界面特性包括重设元素尺寸、盒尺寸以及轮廓等。 新的用户界面属性 下面的表格列出了所有的转换属性: 属性 描述 CSS appearance 允许您将元素设置为标准用户界面元素的外观 3 box-sizi...