如何从 js 或 jquery 的文本区域中的光标位置获取最近的"<"



知道这些,但想要类似的东西

<script>
let value = document.getElementById("textarea");
value.indexOf("<")
value.lastIndexOf("<")
value.nearestIndexOf("<") // how can i do it?
</script>

当距离等于两个方向时,您没有指定应该选择什么,这里有一个片段,它从插入符号的左侧选择最近的索引。

const textArea = document.querySelector('textarea');
function nearestOf(char, textArea) {
const text = textArea.value,
origo = textArea.selectionStart,
leftIndex = text.lastIndexOf(char, origo - 1),
rightIndex = text.indexOf(char, origo);
let distLeft, distRight, indices = {
[distLeft = leftIndex < 0 ? Infinity : origo - leftIndex]: leftIndex,
[distRight = rightIndex < 0 ? Infinity : rightIndex - origo + 2]: rightIndex
};
return indices[Math.min(distRight, distLeft)];
}
textArea.addEventListener('input', e => {
const s = nearestOf('<', e.target);
console.log('nearestOf:', s);
});
<textarea></textarea>

该代码将插入符号左侧和右侧最近的<字符保存到Index变量,距离存储在dist变量和indices对象的键中。如果没有从左侧找到字符,则相应的键设置为Infinity,值设置为-1。对右侧字符执行相同的检查。如果没有搜索到的字符,indices对象只包含一个Infinity键。return语句通过表示距离的键从indices对象中选择最短值的索引。

distRight中的奇数常数2确保在距离相同时选择左侧。

最新更新