- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试检测用户在关注 HTML 输入元素时点击的完整单词,然后查看它是否是 URL。我正在使用以下方法:
let el = this.reminderInput.nativeElement
var fullText = el.value;
console.log(fullText) //logs 'test http://www.google.com'
var split = el.selectionStart
console.log(split) //logs 18
var a = fullText.substring(0, split).match(/[A-Za-z]*$/)[0]
var b = fullText.substring(split).match(/^[A-Za-z]*/)[0]
我的输入元素中有以下字符串:
test http://www.google.com
在此示例中,如果用户在 google 中的 o
之间单击,a
将打印出 go
和 b
将打印出 gle
。
我希望 a
打印出 http://www.go
和 b
打印出 ogle。 com
,因此,当我组合 a + b
时,我会得到完整的字符串 http://www.google.com
并检查它是否是一个有效的 URL,如果是,请在另一个选项卡中打开它。
如何更新我的正则表达式以仅检测单词是否不是空格/回车,以便我可以获得选择的完整单词并检查它是否是 URL?
最佳答案
这是一个总体思路:匹配所有非空白 block 但保留每个匹配项的索引。然后遍历匹配项,寻找最适合 target.selectionStart
的单词。从那里,它是一个 known problem检测该词是否为 URL。
const findWordUnderCursor = e => {
const words = [];
for (let m, re = /\S+/g; m = re.exec(e.target.value);) {
words.push([m[0], m.index]);
}
const cursor = e.target.selectionStart;
const target = words.find(([word, i]) => i + word.length >= cursor);
document.querySelector("#output").innerText = `{${target ? target[0] : ""}}`;
};
const inpElem = document.querySelector("input");
inpElem.addEventListener("keyup", findWordUnderCursor);
inpElem.addEventListener("click", findWordUnderCursor);
inpElem.addEventListener("blur", e => {
document.querySelector("#output").innerText = "";
});
* { font-family: monospace; }
<input value="foo test http://www.google.com bar" size=40>
<div id="output"></div>
如果您正在使用框架(看起来您是),请将 DOM 交互替换为框架的调用。
如果匹配和迭代整个输入的想法看起来不高效,您总是可以走指针路线并从选择开始向前和向后走,直到您在任一端点击空白:
const findWordUnderCursor = e => {
let start = e.target.selectionStart;
let end = start;
const val = e.target.value;
for (; start > 0 && /\S/.test(val[start-1]); start--);
for (; end < val.length && /\S/.test(val[end]); end++);
document.querySelector("#output").innerText = `{${val.slice(start, end)}}`;
};
const inpElem = document.querySelector("input");
inpElem.addEventListener("keyup", findWordUnderCursor);
inpElem.addEventListener("click", findWordUnderCursor);
inpElem.addEventListener("blur", e => {
document.querySelector("#output").innerText = "";
});
* { font-family: monospace; }
<input value="foo test http://www.google.com bar" size=40>
<div id="output"></div>
关于javascript - 检测 selectionStart 处的单词是否为 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59473111/
这个问题在这里已经有了答案: selectionStart-End with textareas (2 个答案) 关闭 10 年前。 据我了解,selectionStart 必须从输入文本或文本区域
我正在尝试对文本框使用 SelectionStart 和 SelectionLength 属性。它没有效果,但也没有错误。它实际上是后台工作程序 ProgressChanged 方法的一部分,但我已经
我需要向用户显示,就像在 notepad.exe 中一样,他在光标上的文本的选择开始和长度。 选择长度没有问题,因为 Richtextbox 支持带有开始和结束的选择属性。 http://msdn.m
我正在为彩色文本使用 RichTextBox。假设我想为文本的不同部分使用不同的颜色。到目前为止一切正常。 我目前遇到 RichTextBox 的 SelectionStart 属性问题。我已经为 R
我在让下面的脚本与我的文本编辑器一起工作时遇到了一些困难。我不确定出了什么问题,但 selectionStart 和 selectionEnd 返回时未定义。 它应该在可编辑的 iframe 中获取突
在我的简单书签中,我调用了文档的所有 input 元素,然后尝试访问每个元素的 selectionStart: javascript: (function () { var inps=documen
我遇到了这个烦人的问题,我似乎无法在文本区域中获取所选文本的开始和结束索引,我得到的所有内容都是未定义的,如下所示: $('#myarea').selectionStart; // return un
我正在使用 selectionStart和 selectionEnd为了获得文本选择的起点和终点。 代码:https://codesandbox.io/s/busy-gareth-mr04o 但是,我
如果我输入 a然后 进入 IE11 文本区域并记录 selectionStart ,它是 2 (这是我所期望的)。但是,如果我以编程方式将 textarea 的值设置为 'a\n'相反,selecti
return layout.getLineForOffset(selectionStart); 这条线导致我的应用崩溃。 我正在用它来获取多行编辑文本中的当前光标行。像这样。 public int g
我正在尝试获取用户在文本框上单击的插入符号位置。我想在用户点击输入的位置添加一定的文本。我正在尝试在 input 的 onFocus 方法中执行此操作。但是,e.target.selectionSta
我正在尝试检测用户在关注 HTML 输入元素时点击的完整单词,然后查看它是否是 URL。我正在使用以下方法: let el = this.reminderInput.nativeElement var
每当我突出显示selectionStart = 0;时,该代码不执行。但是,如果我突出显示文本区域中第一个字符前面的一个字符,则代码将起作用。如果我突出显示文本区域中的第一个字符,有什么想法可以使此代
$(element)[0].selectionStart 似乎只适用于文本区域。是否有非文本区域的替代方案 我正在尝试将字符串包装在标记(粗体、斜体...)中的 DOM 元素中 另外,如何取消包装?
我有一个多行文本框,我想在文本框下方的标签中显示用户当前的行号和列号。看起来我可以使用 SelectionStart 属性、GetLineFromCharIndex 方法和 GetFirstCharI
我一直在努力使用 textarea 的 selectionStart 和 selectionEnd 属性,以使它们与 contenteditable div 元素一起使用。我在谷歌和SO上检查了很多相
我正在将一个 angularJS 文本插入器实现到一个文本区域,该文本区域将指定的文本插入到文本区域中光标的位置。经过一些谷歌搜索后,我在网上找到了这个示例。 指令的主体在这里 app.directi
使用这段代码,我可以检查 Firefox 中文本区域中的插入符位置: document.getElementById("myTextArea").selectionStart 这在 IE 8 中不起作
我有一个带有自定义样式的 TextBox 输入字段: 我添加了自定义样式:
如何根据鼠标位置设置 WinForms TextBox 的 SelectionStart?我正在扩展 TextBox 并希望在用户右键单击 TextBox 时将 carot 设置在鼠标点下方的位置(即
我是一名优秀的程序员,十分优秀!