关于两个不常用的API createRange(处理tooltip展示)和 Shadow DOM(样式隔离)还有 Selection做复制粘贴功能的API

表格Tooltip显示逻辑
本文介绍了一个表格组件中Tooltip的显示逻辑实现方式。当单元格内容过长时,通过计算内容的实际宽度与显示宽度对比,决定是否显示Tooltip。此外,文章还提到了Shadow DOM的基本用法及其样式注入的方法。

1.createRange是我在表格里面看到关于tooltip 当文字长度过长就会有tip没有就不会展示 一直在想这个问题然后看了源码 发现实现就是用这个实现 先附源码

        <template v-if="renderType === 'normal'">
            <template v-if="column.tooltip">
                <Tooltip transfer :content="row[column.key]" :theme="column.tooltipTheme ? column.tooltipTheme : tableRoot.tooltipTheme" :disabled="!showTooltip" :max-width="column.tooltipMaxWidth ? column.tooltipMaxWidth : tableRoot.tooltipMaxWidth" class="ivu-table-cell-tooltip">
                    <span ref="content" @mouseenter="handleTooltipIn" class="ivu-table-cell-tooltip-content">{{ row[column.key] }}</span>
                </Tooltip>
            </template>
            <span v-else>{{row[column.key]}}</span>
        </template>
            handleTooltipIn () {
                const $content = this.$refs.content;
                let range = document.createRange();
                range.setStart($content, 0);
                range.setEnd($content, $content.childNodes.length);
                const rangeWidth = range.getBoundingClientRect().width;
                this.showTooltip = rangeWidth > $content.offsetWidth;
                range = null;
            },

var range = document.createRange();
range.setStart(startNode, startOffset);
range.setEnd(endNode, endOffset);
这里startNode
指startContainer, 自然就是指dom元素了,
2.shadow Dom
vide标签为例
在这里插入图片描述
Shadow DOM 允许将隐藏的 DOM 树附加到常规的 DOM 树中——它以 Shadow root 节点为起始根节点,在这个根节点的下方,可以是任意元素,和普通的 DOM 元素一样

let shadowRoot = shadowHostElement.attachShadow({mode: 'open'});
let shadowRoot = shadowHostElement.attachShadow({mode: 'closed'});
open 表示可以通过页面内的 JavaScript 来获取 Shadow DOM,例如使用 Element.shadowRoot 属性
let shadowRoot = shadowHostElement.shadowRoot;
如果将 mode 设置为 closed,那么elementRef.shadowRoot 将会返回 null

栗子
var style = document.createElement('style');
style.textContent = `
    .title {
        color: blue;
    }
`;
shadow.appendChild(style);

// 使用 link 标签为 Shadow DOM 添加样式
const linkElem = document.createElement('link');
linkElem.setAttribute('rel', 'stylesheet');
linkElem.setAttribute('href', 'style.css');
shadow.appendChild(linkElem);

3.Selection
在这里插入图片描述

// 对选定的文字进行加粗
document.selection.createRange().execCommand("Bold")
//  获取选定的文本
document.selection.createRange().text
// 获取选定的html
document.selection.createRange().htmlText
// 清除选定的内容
document.selection.clear()
// 弹出选择区的类型( None,Text,...)
document.selection.type
 // 获取选取区的文字
var range = document.selection.createRange();  // 创建文本区域对象
range.moveStart("character",2);                          // 选定区起始点向后移动2个字符
range.moveEnd("character",1);                          // 选定区结束点向后移动1个字符
console.log(range.text)

参考https://blog.csdn.net/qq_31967569/article/details/104332853

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值