【JS自用案例6】网页点击哪个元素就全部选中元素内文字/网页内点击哪里复制哪里

需求:在使用一下AI改写工具文字时,需要频繁地全部选中人,然后ctrl+a全部选中,能不能直接点击一下就全部选中并复制呢?
问题:是否需要绑定事件,不需要!
使用方法,直接打开console粘贴进控制台,或写入脚本



window.onclick = function (e) {
            // 获取点击元素对象
            var element = document.elementFromPoint(e.clientX,e.clientY);
//====修改1====,根据非触发区最高级的父element,设置非触发区

            var pareElet = document.getElementsByClassName("w-full h-32 md:h-48 flex-shrink-0")[0]
            var pareElet2 =  document.getElementsByTagName("textarea")[0].parentNode.parentNode.parentNode.parentNode
            // 最初的需求:获取点击元素的类名并弹窗显示
            //alert(element.classList);
            // 让你看到自己选中复制的内容

            //复制命令
              // 检查是否在父element下的element
              if( isParent(element,pareElet) == false && isParent(element,pareElet2) == false ){
                selectText(element)

                console.log("element")
                console.log(element)

                console.log("pareElet")
                console.log(pareElet)

                console.log("copy")

                booll = document.execCommand("Copy");


              }else{
                console.log("focus")

//====修改2====,是否需要点击触发全选
                element.setSelectionRange(0,element.value.length)
                element.focus()
              }
        }

function selectText(element) {
		  var text = element
			var selection = window.getSelection();
			var range = document.createRange();
			range.selectNodeContents(text);
			selection.removeAllRanges();
			selection.addRange(range);
	}


function isParent (obj,parentObj){
      while (obj != undefined && obj != null && obj.tagName.toUpperCase() != 'BODY'){
        // console.log("judge")
        if (obj == parentObj){
          return true;
        }
          obj = obj.parentNode;
          // console.log(obj)
        }
      return false;
}




//version1 错误示范,无法选中文本框

window.onclick = function (e) {
            // 获取点击元素对象
            var element = document.elementFromPoint(e.clientX,e.clientY);
            // 获取点击元素的类名并弹窗显示
            //alert(element.classList);
            // 让你看到自己选中复制的内容
              selectText(element)
            //复制命令
             booll = document.execCommand("Copy");

        }

function selectText(element) {
		var text = element
		if (document.body.createTextRange) {

			var range = document.body.createTextRange();
			range.moveToElementText(text);
			range.select();
		} else if (window.getSelection) {
			var selection = window.getSelection();
			var range = document.createRange();
			range.selectNodeContents(text);
			selection.removeAllRanges();
			selection.addRange(range);
			/*if(selection.setBaseAndExtent){
				selection.setBaseAndExtent(text, 0, text, 1);
			}*/
		} else {
			alert("none");
		}
	}

方法二:使用clipboard库(待尝试)


//@require      https://cdn.bootcss.com/clipboard.js/2.0.1/clipboard.min.js
//需要库

var clipboard = new ClipboardJS('.body', {
       text: function() {
           return copyValue;
       }
    });
    clipboard.on('success', function(e) {
        console.log(e);
    });
    clipboard.on('error', function(e) {
    	e.clearSelection();
        console.log(e);
    });
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值