target-text和selection伪元素的比较用法

::target-text 伪元素用来设置文字锚点的高亮状态,该功能是Chrome 89支持了基于文字内容的锚点定位。

::selection 伪元素用来设置文字被选中的高亮状态。

两者都只能修改与文字样式相关的样式,例如,颜色、背景色、下划线、文字阴影等样式。

实例如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>target-text和selection伪元素的比较用法-www.xiaoyuzl.com小鱼资料库</title>
  <style>
    ::target-text, ::selection {
      background-color: #16a085;
      color: #fff;
    }

  </style>
</head>
<body>
  <p>::target-text 伪元素用来设置文字锚点的高亮状态,该功能是Chrome 89支持了基于文字内容的锚点定位。</p>
  <p>::selection 伪元素用来设置文字被选中的高亮状态。</p>
  <p>两者都只能修改与文字样式相关的样式,例如,颜色、背景色、下划线、文字阴影等样式。</p>
</body>
</html>

在线展示效果:https://www.xiaoyuzl.com/plus/view-199526-1.html

<think>好的,我现在需要解决用户在Vue中实现输入框获取焦点时全选内容,但在输入时不触发全选的问题。首先,我得理解用户的需求。用户希望在输入框获得焦点的时候自动全选里面的文字,这样方便用户直接替换内容。但如果在输入的时候(比如用户开始打字),不应该全选,否则输入的内容会覆盖原有内容,这显然不符合预期。 接下来,我需要回忆Vue中处理焦点事件的方法。通常,我们会使用`@focus`事件监听器来触发获取焦点的动作。然后在事件处理函数中调用`select()`方法全选文本。比如,给input元素添加`@focus="handleFocus"`,然后在方法里执行`event.target.select()`。不过,用户提到在输入时不需要全选,这时候可能存在问题。因为当输入框已经获取焦点后,用户开始输入,这时候如果再次触发全选,就会覆盖输入的内容。需要找到一种方式,只在初始获得焦点时全选,而不是在输入的时候。 这时候,可能需要区分是自动获取焦点还是用户通过点击或其他方式触发的焦点。不过,Vue中处理这种情况可能需要引入一个状态变量来跟踪是否已经全选过。例如,在`handleFocus`方法中设置一个标志位`isFocused`,初始为false,当第一次触发focus时全选并设置为true,之后在输入事件中重置这个标志位。或者,考虑使用`mousedown``keyup`事件来配合处理,但这样可能会比较复杂。 另外,注意到引用[3]中提到关于element-ui Select选择器的焦点问题,以及`:focus-within`伪类的兼容性问题。虽然问题不同,但可能涉及到焦点处理的相关知识。不过这里的问题更偏向于原生input的处理,而不是组件库的问题。 然后,想到可能需要在focus事件处理时,检查是否是通过鼠标点击或键盘Tab键触发的。如果是通过鼠标点击,可能需要判断是否已经处于焦点状态,避免重复全选。或者,可以使用一个定时器,在focus事件后短暂延迟执行全选,但这样可能会有体验上的问题。 再考虑,用户输入的时候,比如当输入框已经获得焦点,用户开始输入,这时候输入框的内容变化会触发`input`事件。这时候可能需要监听`input`事件,并在此时取消全选状态。但如何判断是第一次focus还是后续的输入呢? 可能的解决方案是:在focus事件中全选文本,然后监听`keydown`事件,当用户按下第一个键时,取消全选。例如,当用户按下任何键输入时,将选择范围设置为当前光标位置,而不是全选。这样,在输入的时候就不会全选了。 具体实现的话,可以在focus事件中调用`select()`,然后添加一个`keydown`事件监听器,当用户按下键时,将selectionStartselectionEnd设置为当前值,或者直接调用`event.target.setSelectionRange(event.target.selectionStart, event.target.selectionEnd)`,这样就不会改变选择范围。不过需要确保这个处理只执行一次,或者在每次输入后取消全选状态。 另一个思路是使用`v-model`绑定输入值,并在focus时全选,但在输入时通过判断是否已经全选来避免重复触发。不过这可能不太直接。 然后,想到可以结合`focus``click`事件。因为当用户点击输入框时,会先触发`mousedown`,然后是`focus`,然后是`click`。但如果在`focus`时全选,然后在`click`时判断是否已经全选,可能会干扰用户的手动选择。这可能会导致用户无法通过点击来移动光标,因为每次点击都会触发全选。这可能不是用户想要的。 因此,可能需要一种方式,只在输入框首次获得焦点时全选,而不是每次点击都触发。例如,当组件挂载时自动聚焦,或者在特定条件下触发全选。或者,使用一个标志位,当输入框的值被修改后,就不再自动全选。 例如,可以设置一个变量`shouldSelectAll`,初始为true。在focus事件中,如果`shouldSelectAll`为true,则执行全选,并将其设为false。当输入事件发生时,即用户开始输入,将`shouldSelectAll`设为false,这样下次获得焦点时不会全选。但这样可能不符合需求,因为用户可能希望每次获得焦点时都全选,除非正在输入。 或者,在focus事件中全选,但在input事件中设置一个标志位,表示用户已经开始输入,此时不再触发全选。例如: data() { return { hasInput: false } }, methods: { handleFocus(event) { if (!this.hasInput) { event.target.select(); } }, handleInput() { this.hasInput = true; } } 但这样可能有问题,因为当输入框失去焦点后再次获得焦点时,hasInput已经是true,就不会再全选了。这不符合用户希望每次获得焦点都全选的需求,除非用户正在输入。 看来需要另一个方法。或许,可以利用`document.activeElement`来判断是否已经处于焦点状态,但这可能不太可靠。 另一个思路是,在focus事件中全选,但之后如果用户开始输入(触发input事件),则通过一个标志位来阻止后续的focus事件的全选动作。但这样可能需要更复杂的逻辑。 或者,考虑在focus事件中使用setTimeout来延迟执行全选,这样当用户点击输入框时,如果快速输入,可能不会触发全选。但这种方法可能不可靠,而且用户体验可能不好。 这时候,想到一个可能的解决方案:在focus事件中全选文本,然后监听`keydown`事件,当用户按下第一个键时,将光标移动到末尾,而不是全选。例如: methods: { handleFocus(event) { event.target.select(); }, handleKeyDown(event) { // 当用户开始输入时,取消全选,将光标移到末尾 const input = event.target; input.setSelectionRange(input.value.length, input.value.length); // 移除keydown事件监听,避免重复执行 input.removeEventListener(&#39;keydown&#39;, this.handleKeyDown); } } 然后在模板中,给input添加`@focus="handleFocus"``@keydown="handleKeyDown"`。这样,当输入框获得焦点时全选,当用户按下第一个键时,光标会移动到末尾,用户输入的内容会追加而不是替换。但这样可能不符合用户的需求,因为用户可能希望输入时正常替换内容,而不是追加。不过,用户的需求是当输入时不触发全选,但正常输入时应该可以编辑内容。如果全选后,用户按下一个键,比如字母,会替换全部内容,这可能不是用户想要的。所以需要当用户开始输入时,取消全选状态,允许正常编辑。 因此,在handleKeyDown中,将selection范围设置为当前光标位置,而不是全选。例如,在keydown事件中,将selectionStartselectionEnd设置为当前的位置,这样用户输入时就不会全选了。或者,在keydown事件中,如果此时是全选状态,则将光标移动到开始位置或者末尾,从而取消全选。 具体来说,当用户按下第一个键时,判断输入框是否处于全选状态。如果是,则将光标移动到末尾,这样用户输入的内容会添加到末尾而不是替换全部。或者,直接取消全选,让用户从当前位置开始输入。 例如: handleFocus(event) { event.target.select(); }, handleKeyDown(event) { const input = event.target; if (input.selectionStart === 0 && input.selectionEnd === input.value.length) { // 当前是全选状态,将光标移动到末尾 input.setSelectionRange(input.value.length, input.value.length); } // 只执行一次,所以移除事件监听 input.removeEventListener(&#39;keydown&#39;, this.handleKeyDown); } 但这里可能需要将keydown事件绑定到输入框上,或者在Vue中使用@keydown事件。但这样可能需要确保在每次focus后重新绑定keydown事件。或者,在handleFocus方法中,添加一个一次性的事件监听器: handleFocus(event) { const input = event.target; input.select(); const handleFirstKeyDown = (e) => { // 当用户按下第一个键时,取消全选 input.setSelectionRange(input.value.length, input.value.length); input.removeEventListener(&#39;keydown&#39;, handleFirstKeyDown); }; input.addEventListener(&#39;keydown&#39;, handleFirstKeyDown); } 这样,每次输入框获得焦点时,会全选内容,并添加一个keydown事件监听器。当用户第一次按下键时,取消全选,将光标移到末尾,然后移除这个监听器。这样,后续的按键输入就不会触发这个处理,用户就可以正常输入了。 这种方法可能有效。因为当用户第一次获得焦点时,内容被全选,此时用户按下任何键,触发keydown事件,此时将光标移到末尾,这样输入的内容就会添加到末尾,而不是替换全部内容。或者,用户可能希望输入时正常替换内容,比如当全选后,用户按下退格键或输入文字,应该替换全选的内容。这时候,可能需要不同的处理方式。 这时候,用户的需求是:当输入框获得焦点时自动全选内容,但当用户开始输入时(比如用键盘输入),此时不需要全选,即允许用户正常编辑,而不是替换全部内容。这可能需要区分焦点事件是由用户点击触发的还是通过代码触发的,或者需要处理用户首次输入时的行为。 或者,考虑在focus事件中全选内容,然后在input事件中检查内容是否变化,如果变化了,则取消全选状态。不过这可能不太容易实现。 回到之前的思路,使用在focus时全选,并添加一个一次性的keydown事件监听器,在用户第一次按键时取消全选。这样,当用户通过点击或Tab键聚焦到输入框时,内容被全选,但如果用户开始输入,第一个按键会取消全选,允许正常输入。这样既满足了初始全选的需求,又避免了输入时全选的问题。 因此,最终的解决方案可能是这样的: 在Vue的模板中,给input元素添加`@focus="handleFocus"`,然后在handleFocus方法中,全选文本,并为该输入框添加一个一次性的keydown事件监听器,在第一次按键时取消全选。 具体实现代码如下: <template> <input v-model="inputValue" @focus="handleFocus" /> </template> <script> export default { data() { return { inputValue: &#39;&#39; }; }, methods: { handleFocus(event) { event.target.select(); const handleFirstKeyDown = (e) => { // 将光标移至末尾,取消全选 event.target.setSelectionRange(event.target.value.length, event.target.value.length); event.target.removeEventListener(&#39;keydown&#39;, handleFirstKeyDown); }; event.target.addEventListener(&#39;keydown&#39;, handleFirstKeyDown); } } }; </script> 这样,当输入框获得焦点时,全选内容。当用户按下第一个键时,光标被移到末尾,从而取消全选,用户输入的内容会从末尾开始添加。或者,用户可能希望输入时直接替换全选的内容,但根据用户的问题描述,他们希望在输入时不要全选,也就是允许用户部分编辑。例如,如果输入框有内容“abc”,获得焦点时全选,用户按下“d”,则内容变为“d”,但用户可能需要的是保留“abc”并继续编辑,所以这时候应该取消全选,让用户的光标在开始位置,或者保持原样。 但根据上面的代码,当用户按下第一个键时,光标会被移到末尾,所以输入的内容会添加到末尾。这可能不符合预期。例如,原内容“abc”被全选,用户按下“d”,结果变成“d”,但用户可能希望变成“abcd”或者直接替换。这里可能需要根据具体需求调整。 如果用户希望的是,当输入框获得焦点时全选,但当用户开始输入时,正常替换全选的内容,那么其实不需要额外处理,因为浏览器默认的行为是,当全选状态下输入内容,会替换全选的内容。但用户的问题在于,他们可能发现当输入时,在某些情况下会再次触发全选,导致输入的内容被覆盖。这可能是因为在输入过程中,输入框可能失去焦点又重新获得焦点,导致再次全选。但根据用户的问题描述,他们希望的是在输入时不触发全选。 因此,可能用户遇到的问题是在输入过程中,输入框重新获得焦点,导致再次全选。这时候需要确保只有在初始获得焦点时全选,而后续的焦点事件(比如在输入过程中由于某种原因失去焦点又获得焦点)不再触发全选。这时候可能需要使用一个标志位来记录是否已经处理过全选。 例如,在data中设置一个`isSelected`变量,初始为false。当focus事件触发时,如果`isSelected`为false,则全选并设置为true。当输入框失去焦点时,在blur事件中将`isSelected`重置为false。这样,每次输入框获得焦点时,只有第一次会全选,之后如果失去焦点再获得焦点,会再次全选。这可能不符合用户的需求,因为用户可能希望每次获得焦点都全选,除非用户已经开始输入。 这时候,可能需要结合blurinput事件来管理状态。例如,当用户开始输入时,标记为已输入,此时即使再次获得焦点,也不全选。或者在blur事件中重置状态,允许下次获得焦点时再次全选。 但这样逻辑会变得复杂,可能需要更多的代码。 总结,可能的解决方案是: 1. 在focus事件中全选内容。 2. 添加一个一次性的keydown事件监听器,当用户第一次按键时,取消全选,将光标移动到末尾(或保持当前位置)。 这样,当用户通过点击或Tab键聚焦到输入框时,内容被全选。当用户开始输入时,第一个按键会取消全选,允许正常编辑。这种方法可以满足用户的需求。 现在,验证这个解决方案是否有效。例如,当用户点击输入框,内容全选,此时用户按下“a”键,输入框的内容会变成“a”,因为全选状态下输入会替换内容。但根据代码,在keydown事件中,会将光标移动到末尾,这样输入的内容会添加到原内容的后面,而不是替换。这取决于具体的处理方式。 如果用户希望的是,当全选后,用户输入的内容替换全选的内容,则不需要处理keydown事件,因为这是浏览器默认的行为。但用户的问题描述中提到“在输入时不全选”,可能是指当用户正在输入时,输入框不会再次全选,比如在输入过程中,输入框可能因为某些原因重新获得焦点,导致再次全选。但根据用户的问题,可能更关注的是初始获得焦点时的全选,而输入时不触发。 另一种情况是,当用户通过鼠标点击输入框的某个位置来移动光标,此时focus事件触发全选,导致用户无法手动选择部分文本。这时候需要处理mousedown事件,可能比较复杂。 例如,当用户点击输入框中的某个位置,期望将光标移到那里,但focus事件触发了全选,覆盖了用户的选择。这时候,可能需要区分focus事件是由鼠标点击还是键盘Tab键触发的。 这种情况下,解决方案可能无法满足,因为无论如何,focus事件都会触发全选。这时候可能需要使用其他方法,比如延迟执行全选,或者检查触发焦点的事件类型。 例如,在mousedown事件中设置一个标志位,然后在focus事件中判断是否由鼠标点击触发,如果是,则不执行全选。但这样可能难以实现,因为focus事件的触发可能无法直接关联到mousedown事件。 或者,使用一个定时器,在focus事件后短暂延迟执行全选,这样用户通过鼠标点击选择位置时,可能在定时器触发前已经改变了光标位置,导致全选覆盖。但这种方法不可靠,并且可能影响用户体验。 这时候,可能需要接受这种限制,即该解决方案适用于通过键盘导航(如Tab键)聚焦输入框时全选,而通过鼠标点击聚焦时,用户可能希望手动选择位置,这时候全选可能不符合预期。但用户的需求可能更倾向于在某些情况下全选,比如表单自动聚焦时,而不是用户主动点击时。 因此,可能需要根据应用场景调整解决方案。如果输入框在页面加载时自动获得焦点,那么全选是有意义的。而如果用户通过点击来激活输入框,可能不希望全选。 为了区分这两种情况,可以在组件挂载时自动聚焦输入框,并触发全选,而用户手动点击时不做处理。但如何在Vue中实现自动聚焦呢?可以使用`autofocus`属性,或者在mounted钩子中调用`focus()`方法。 例如: mounted() { this.$refs.input.focus(); } 然后,在handleFocus方法中全选内容。这样,当组件加载时自动聚焦并全选,而用户之后的操作可能不会触发全选。但用户可能仍然会通过Tab键或点击再次聚焦输入框,这时候仍然会触发全选。 综上,最开始的解决方案可能是在focus事件中全选,并添加一次性的keydown处理来取消全选。这可能适用于大多数情况,允许用户在首次获得焦点时全选,输入时正常编辑。 现在,测试这个方案: 当输入框获得焦点时,内容被全选。此时用户按下任意键,触发keydown事件,将光标移动到末尾,取消全选。这样,输入的内容会追加到末尾,而不是替换全部。这可能与用户预期不符,因为用户可能希望输入时替换全选的内容。例如,输入框有内容“abc”,全选后用户输入“d”,预期结果是“d”,但根据上述代码,结果可能是“abcd”。 这说明之前的方案可能不符合用户的需求。用户可能希望在获得焦点时全选,输入时直接替换,而不是追加。这时候,不需要额外的处理,因为浏览器默认的行为就是在全选状态下输入会替换内容。但用户的问题可能出现在其他地方,例如,在输入时,输入框因为某些原因重新获得焦点,导致再次全选。 这时候,可能需要重新审视问题。用户的问题描述是:“在Vue中实现输入框获取焦点时全选内容,但在输入时不全选的问题”。可能用户的真实需求是,当输入框通过某些方式(如编程方式)获得焦点时全选内容,但用户手动输入时不触发全选。或者,当用户通过点击输入框内部(已获得焦点)时,不触发全选,只有首次获得焦点时全选。 这时候,可能需要使用一个标志位来记录是否已经全选过。例如: data() { return { hasSelected: false }; }, methods: { handleFocus(event) { if (!this.hasSelected) { event.target.select(); this.hasSelected = true; } }, handleBlur() { this.hasSelected = false; } } 然后在模板中,添加@blur="handleBlur"。这样,当输入框首次获得焦点时全选,之后失去焦点再获得焦点时,不会再次全选。这显然不符合需求,因为用户可能希望每次获得焦点都全选。 因此,这种方法不可行。 回到最初的问题,用户可能遇到的情况是,当输入框在输入过程中重新获得焦点,导致再次全选,干扰输入。例如,在某个操作后输入框再次被聚焦,触发全选。这时候,需要避免在输入过程中重复全选。 但根据用户的问题描述,可能只需要在首次获得焦点时全选,而后续的输入不需要。这时候,可能需要结合Vue的模型,在输入框获得焦点时全选,但之后不再处理,直到输入框失去焦点并再次获得焦点。 这似乎又回到了之前的解决方案,即每次获得焦点时全选,但用户输入时如果导致重新获得焦点(比如在移动端可能有不同的事件触发),可能无法避免。 或许,用户的问题其实更简单,他们只是希望当输入框获得焦点时自动全选内容,而当用户开始输入时,不会因为某些原因导致全选。例如,在Vue中使用@focus事件调用select()方法,但发现在输入时,每次按键都会触发全选,这可能是因为输入框在输入过程中失去了焦点,然后重新获得焦点,导致再次全选。但这种情况比较少见。 或者,用户可能错误地在input事件或其他事件中触发了全选,导致输入时内容被全选。这时候需要检查代码是否有其他地方调用了select()。 假设用户只是简单地在@focus事件中调用select(),那么正常情况下,输入时不会触发全选,除非焦点被重新获取。例如,用户点击输入框内部,或者在移动设备中触摸输入框,导致焦点事件再次触发,这时候会再次全选,这可能干扰用户的输入。 为了处理这种情况,可能需要一个更精细的控制,例如,只在输入框首次获得焦点时全选,或者在特定条件下触发全选。 例如,使用一个标志位,当输入框的值为空时,获得焦点时全选,否则不处理。或者,仅在用户通过Tab键聚焦时全选,而通过鼠标点击时不处理。但如何区分这两种情况呢? 在JavaScript中,可以通过检查触发焦点的事件类型来判断。例如,如果焦点事件是由鼠标点击触发的,则可能伴随有mousedown事件,而通过键盘导航(如Tab键)则没有。但这种方法不可靠,因为无法直接访问焦点事件的相关触发事件。 另一种方法是使用setTimeout延迟执行全选,这样如果用户通过鼠标点击选择位置,可能在延迟期间移动了光标,从而避免全选。例如: handleFocus(event) { setTimeout(() => { event.target.select(); }, 0); } 但这样可能导致全选在用户点击后执行,覆盖用户的选择。例如,用户点击输入框的中间位置,此时焦点事件触发,setTimeout将全选操作放入事件循环的队列,在浏览器处理完mousedownclick事件后执行,可能会覆盖用户的光标位置。 因此,这种方法可能并不理想。 回到之前的方案,即在focus事件中全选,并添加一个一次性的keydown事件来取消全选。这样,当用户获得焦点后立即开始输入,全选的内容会被替换,但根据代码,输入的第一个字符会触发keydown事件,将光标移到末尾,导致输入的内容被追加而不是替换。这可能不符合用户预期。 这时候,意识到问题可能出在用户希望的是在获得焦点时全选,而当用户开始输入时,允许正常编辑,即替换全选的内容,而不是追加。这时候,实际上不需要任何额外处理,因为浏览器的默认行为就是在全选状态下输入会替换内容。因此,用户的问题可能并不存在,或者可能存在其他代码干扰。 例如,用户可能在@input事件中调用了select(),导致每次输入时全选。或者,用户使用的某些自定义指令或组件导致了这个问题。 根据用户提供的引用内容,用户可能在Vue中使用类似引用[1]中的动态选项,或者引用[3]中的element-ui组件,可能存在边框闪烁问题,但这些问题与当前问题无关。用户的问题是关于原生input元素或自定义输入组件的处理。 假设用户使用的是原生input元素,正确的做法应该是在@focus事件中调用select(),不需要额外处理,因为浏览器会在全选状态下正常处理输入替换。例如: <template> <input v-model="text" @focus="handleFocus" /> </template> <script> export default { methods: { handleFocus(event) { event.target.select(); } } } </script> 这样,当输入框获得焦点时全选,用户输入时会替换内容。这时候,用户的输入动作不会触发全选,因为全选只在focus时发生,输入时不会重新触发focus事件,除非输入框失去焦点后再次获得焦点。 因此,用户可能遇到的问题是什么?比如,当输入框在输入过程中因为某些原因重新获得焦点,导致再次全选。例如,在移动端,虚拟键盘弹出可能导致焦点事件再次触发。或者在某个框架中,输入框的blurfocus事件被频繁触发。 这时候,可能需要使用一个标志位来避免重复全选。例如,在data中设置一个isInputActive标志,初始为false。在focus事件中,如果isInputActive为false,则全选并设置为true。在blur事件中,设置为false。在input事件中,设置为true。这样,当用户在输入过程中,输入框重新获得焦点时,isInputActive为true,不会触发全选。 代码示例: data() { return { isInputActive: false }; }, methods: { handleFocus(event) { if (!this.isInputActive) { event.target.select(); } this.isInputActive = true; }, handleBlur() { this.isInputActive = false; }, handleInput() { this.isInputActive = true; } } 在模板中: <input v-model="text" @focus="handleFocus" @blur="handleBlur" @input="handleInput" /> 这样,当输入框首次获得焦点时,全选内容,isInputActive设为true。在输入过程中,如果输入框重新获得焦点(比如由于移动端键盘调整),由于isInputActive已经为true,不会再次全选。当输入框失去焦点时,isInputActive重置为false,下次获得焦点时会再次全选。 这可能解决用户在输入过程中焦点重新获得导致的全选问题。 总结,用户的问题可能需要根据具体情况采用不同的解决方案。如果问题只是简单的在focus时全选,输入时正常替换,那么原生的@focus处理足够。如果存在焦点重复触发的问题,则需要引入状态管理来避免。</think>在Vue中实现输入框获取焦点时全选内容且输入时不触发全选,可以通过以下步骤实现: ### 解决方案 1. **绑定`@focus`事件**:在焦点事件中调用`select()`方法全选文本。 2. **通过`@keydown`事件取消全选**:在首次按键时移动光标到末尾,防止输入时全选。 ```html <template> <input v-model="inputValue" @focus="handleFocus" /> </template> <script> export default { data() { return { inputValue: &#39;&#39; } }, methods: { handleFocus(event) { // 全选文本 event.target.select() // 添加一次性按键监听 const handleFirstKeyDown = (e) => { event.target.setSelectionRange(event.target.value.length, event.target.value.length) event.target.removeEventListener(&#39;keydown&#39;, handleFirstKeyDown) } event.target.addEventListener(&#39;keydown&#39;, handleFirstKeyDown) } } } </script> ``` ### 实现说明 1. **获取焦点时全选**:通过`@focus="handleFocus"`触发全选操作,使用`event.target.select()`实现。 2. **首次按键取消全选**:添加一次性`keydown`事件监听器,当用户首次输入时将光标移至末尾,避免输入时全选[^3]。 ### 效果 - 初始聚焦时内容全选,便于直接替换。 - 用户输入时自动取消全选,支持正常编辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值