判斷可編輯div的光標是否在最前面

要判斷一個可編輯div(contenteditable)中的光標是否位于最前面,可以使用以下幾種方法:

方法一:使用Selection和Range API

function isCaretAtStart(div) {const selection = window.getSelection();if (selection.rangeCount === 0) return false;const range = selection.getRangeAt(0);const startOffset = range.startOffset;const startContainer = range.startContainer;// 檢查是否在div的最開始位置return (range.collapsed && startOffset === 0 && (startContainer === div || startContainer.parentNode === div));
}// 使用示例
const editableDiv = document.getElementById('myEditableDiv');
console.log(isCaretAtStart(editableDiv));

方法二:簡化版本

function isCaretAtStart(div) {const selection = window.getSelection();if (!selection.rangeCount) return false;const range = selection.getRangeAt(0);return range.collapsed && range.startOffset === 0 && range.startContainer === div.firstChild || range.startContainer === div;
}

方法三:處理更復雜的內容結構

如果div內可能有嵌套元素,這個更健壯的版本可能更合適:

function isCaretAtStart(div) {const sel = window.getSelection();if (!sel.rangeCount) return false;const range = sel.getRangeAt(0);if (!range.collapsed) return false;// 創建從div開始到光標位置的range進行比較const compareRange = document.createRange();compareRange.selectNodeContents(div);compareRange.setEnd(range.startContainer, range.startOffset);return compareRange.toString() === '';
}

使用注意事項

  1. 這些方法應在光標位置變化時調用(如監聽keyupmouseupselectionchange事件)
  2. 對于空div,光標位置通常被認為是在最前面
  3. 不同瀏覽器可能有細微差異,建議進行充分測試

事件監聽示例

const editableDiv = document.getElementById('myEditableDiv');
editableDiv.addEventListener('keyup', function() {if (isCaretAtStart(this)) {console.log('光標在最前面');}
});

這些方法可以幫助你準確判斷光標是否位于可編輯div的最前面位置。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917955.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917955.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917955.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【unity實戰】使用Unity程序化生成3D隨機地牢(附項目源碼)

最終效果 文章目錄最終效果前言1、理解程序生成的核心概念2、種子值的核心作用3、程序生成的實際應用4、主流程序生成技術概覽5、選擇合適的技術實戰1、素材2、生成一面墻變換矩陣數據3、渲染墻壁4、加點隨機不同的墻壁效果5、繪制四面墻壁4、在四個角落生成支柱5、生成地板6、…

多賬號管理方案:解析一款免Root的App分身工具

之前有小伙伴問阿燦有沒有可以軟件分身的免費軟件,后來阿燦找到了一款可以無限分身的app感覺很實用,只有10M大小 02軟件介紹說白了它能給各種app和游戲做分身,包括V信、qQ、某音、某付寶這些,而且支持最新的安卓15系統。每個分身…

(附源碼)基于PHP和Vue的網上購物平臺

內容摘要 內容摘要: 隨著互聯網技術的迅猛發展,網上購物已成為人們日常生活的重要組成部分。本文圍繞PHPVue技術棧構建的網上購物平臺展開研究,深入探討了該平臺的架構設計與實現細節。平臺前端采用Vue框架,利用其組件化開發和數據驅動的特性…

51單片機

中斷系統1.什么是中斷當CPU正在處理某件事的時候外界發生了緊急事件請求,要求CPU暫停當前的工作,轉而去處理這個緊急事件,處理完以后,再回到原來被中斷的地方,繼續原來的工作,這樣的過程稱為中斷2.為什么要…

前端開發:HTML(5)—— 表單

下面我們來學習表單。 目錄 什么是Web表單? 表單標簽 1.form標簽 2.輸入框 文本框和密碼框 單選框和復選框 1.單選框 2.復選框 3.按鈕 (1)普通按鈕 (2)提交按鈕 (3)重置按鈕 &#…

【YOLOv8改進 - C2f融合】C2f融合SFS-Conv(空間 - 頻率選擇卷積)提升特征多樣性,同時減少參數和計算量

YOLOv8目標檢測創新改進與實戰案例專欄 專欄目錄: YOLOv8有效改進系列及項目實戰目錄 包含卷積,主干 注意力,檢測頭等創新機制 以及 各種目標檢測分割項目實戰案例 專欄鏈接: YOLOv8基礎解析+創新改進+實戰案例 文章目錄 YOLOv8目標檢測創新改進與實戰案例專欄 介紹 摘要 文…

如何將照片從POCO手機傳輸到Mac電腦

將照片從POCO手機傳輸到Mac電腦可能會有些困難,因為與iPhone不同,POCO設備沒有原生的macOS支持。這常常讓用戶尋找簡單、有效的方法來移動圖片,同時避免丟失質量,節省時間,并避免復雜的軟件設置。如果你想知道如何將照…

最新教程 | CentOS 7 內網環境 Nginx + ECharts 頁面離線部署手冊(RPM 安裝方式)

📁 一、準備階段(在聯網電腦上完成) 1.1 下載 Nginx 官方 RPM 安裝包 在聯網電腦瀏覽器中訪問 Nginx 官方穩定版本倉庫: 🔗 地址:http://nginx.org/packages/centos/7/x86_64/ ??云盤:htt…

Redis 常用數據類型 (下)

文章目錄前言一 Hash 哈希1. Hash 相關命令hset 和 hgethexistshdelhkeyshvalshgetallhmgethlenhsetnxhincrbyincrbyfloat2. Hash 命令小結3. Hash 內部編碼Hash 在緩存中的應用場景介紹緩存方式對比二、List 列表1. LIST總體介紹2. List 普通命令lpushlpushxrpushrpushxlrange…

Java Lambda表達式:簡潔高效的函數式編程

1 lambda表達式Lambda 表達式本質是一個匿名函數,用于把函數作為參數,傳入方法中,實現函數式編程風格。使用Lambda 表達式可以使代碼變的更加簡潔緊湊。語法格式:(parameters)-> expression 或 (parameters)->{ statements…

python中的集合

目錄 初識集合 集合的含義 集合的作用 集合的使用場景 集合的定義 集合的常用操作 元素的增加 函數add() 元素的刪除 函數remove() 函數clear() 函數pop() 集合的遍歷 for循環 while循環 初識集合 集合的含義 在pyrhon中,集合是一種內置的數據結構…

如何將普通HTTP API接口改造為MCP服務器

在現代微服務架構中,MCP(Mesh Configuration Protocol) 作為高效配置分發協議,正逐漸替代傳統HTTP API。本文將手把手教你如何將普通HTTP API升級為高性能MCP服務器。 為什么需要MCP? 傳統HTTP API在配置分發場景存在…

數據結構第8問:什么是樹?

樹 【本節僅描述樹的定義、術語以及相關性質】 定義 樹是由若干個結點組成的有限集合。具有如下特征: 有且僅有一個根結點;除根結點外,每個其它結點有且僅有一個直接的父結點;除根結點外,每個結點可以有零個或者多個子…

PyTorch RNN 名字分類器

PyTorch RNN 名字分類器詳解 使用PyTorch實現的字符級RNN(循環神經網絡)項目,用于根據人名預測其所屬的語言/國家。該模型通過學習不同語言名字的字符模式,夠識別名字的語言起源。 環境設置 import torch import string import un…

面向對象之類方法,成員變量和局部變量

1.類的方法必須包含幾個部分?2.成員變量和局部變量類的方法必須包含哪幾個部分?.方法名:用于標識方法的名稱,遵循標識符命名規則,通常采用駝峰命名法。返回值類型:指定方法返回的數據類型。如果方法不返回任…

古法筆記 | 通過查表進行ASCII字符編碼轉換

ASCII字符集是比較早期的一種字符編碼,只能表示英文字符,最多能表示128個字符。 字符集規定了每個字符和二進制數之間的對應關系,可以通過查表完成二進制數到字符的轉換ASCII字符占用的存儲空間是定長的1字節 ASCII字符的官方碼點表見下圖&…

Linux C實現單生產者多消費者環形緩沖區

使用C11里的原子變量實現,沒有用互斥鎖,效率更高。ring_buffer.h:/*** file ring_buffer.h* author tl* brief 單生產者多消費者環形緩沖區,每條數據被所有消費者讀后才釋放。讀線程安全,寫僅單線程。* version* date 2025-08-06*…

復雜場景識別率↑31%!陌訊多模態融合算法在智慧環衛的實戰解析

摘要:針對邊緣計算優化的垃圾堆放識別場景,本文解析了基于動態決策機制的視覺算法如何提升復雜環境的魯棒性。實測數據顯示在遮擋/光照干擾下,mAP0.5較基線提升28.3%,誤報率降低至行業1/5水平。一、行業痛點:智慧環衛的…

MyBatis-Plus Service 接口:如何在 MyBatis-Plus 中實現業務邏輯層??

全文目錄:開篇語前言1. MyBatis-Plus 的 IService 接口1.1 基本使用示例:創建實體類 User 和 UserService1.2 創建 IService 接口1.3 創建 ServiceImpl 類1.4 典型的數據庫操作方法1.4.1 save():保存數據1.4.2 remove():刪除數據1…

[激光原理與應用-168]:光源 - 常見光源的分類、特性及應用場景的詳細解析,涵蓋技術原理、優缺點及典型應用領域

一、半導體光源1. LED光源(發光二極管)原理:通過半導體PN結的電子-空穴復合發光,波長由材料帶隙決定(如GaN發藍光、AlGaInP發紅光)。特性:優點:壽命長(>5萬小時&#…