javascript - 如何在文本Javascript中获取char的索引作为坐标
问题描述
我想在坐标处获取文本中 char 的索引。我目前的方法是模拟选择。
document.getSelection().anchorOffset
我能够使用以下代码模拟坐标单击,但是与实际单击不同,此模拟单击不会触发选择(设置)。
function click(x,y){
var el = document.elementFromPoint(x,y);
var event = new MouseEvent( "click", { clientX: x, clientY: y, bubbles: true } )
el.dispatchEvent(event);
}
这是实验代码https://jsfiddle.net/fbwgm1s0/1/
function click(x,y){
var el = document.elementFromPoint(x,y);
var event = new MouseEvent( "click", { clientX: x, clientY: y, bubbles: true } )
el.dispatchEvent(event);
}
function printCoordinatesAndSelectedIndex(event) {
let coordinates = "clientX: " + event.clientX + " - clientY: " + event.clientY
let selectedIndex = "index: " + (document.getSelection().anchorOffset -1)
return coordinates + " " + selectedIndex
}
document.querySelector('h1').addEventListener('click', function(event){
let result = document.createElement("div")
result.innerText = printCoordinatesAndSelectedIndex(event)
let results = document.querySelector('#results')
results.appendChild(result)
})
document.addEventListener('keydown', function(event){
document.getSelection().removeAllRanges()
let h1 = document.querySelector("h1").getBoundingClientRect()
var x = h1.x + 50
var y = h1.y + 15
click(x, y)
})
<h1>press any key or click me</h1>
<div id="results"></div>
解决方案
<h1>
您可以将标签内的每个字符包装在<span>
. 这对用户来说是不可见的,但为您提供了另一个元素来监听点击。<span>
然后您可以检查<h1>
.
const h1 = document.querySelector('h1');
const wrapTextWithSpans = target => {
const text = target.textContent;
const separatedText = text.split('');
const wrappedText = separatedText.map(item => `<span>${item}</span>`);
target.innerHTML = wrappedText.join('');
}
h1.addEventListener('click', ({ target }) => {
const index = Array.from(target.parentElement.children).indexOf(target);
console.log(index);
});
wrapTextWithSpans(h1);
<h1>press any key or click me</h1>
<div id="results"></div>
推荐阅读
- google-sheets - 在工作表中搜索一系列列并返回找到搜索键的列标题
- python - 如何解决问题:NOT NULL 约束失败错误?[姜戈]
- xcode - Mac 沙盒和快速测试
- sql-server - [SQL Server]关于UPDATE和INNER JOIN的问题
- c++ - 为什么 Xcode 给出这个错误而不是未声明的标识符错误?
- python - 如何将轴限制设置为围绕 matplotlib 中的一个点对称?
- java - Arraylist 错误索引超出范围或为空
- django - 从 django 模板中的小 mce 中删除底部品牌
- php - Laravel Live 电线增量减量不起作用
- perl - 无法在 Windows 10 中使用 cpan 安装 Imager::File::PNG