簡體   English   中英

在contenteditable =“true”div中鎖定元素

[英]Locking elements in contenteditable=“true” div

我有一個用於用戶輸入的contenteditable div,當點擊一個按鈕時,它顯示替換某些單詞的選項。 首先,它剝離所有html並創建可以替換單詞的span元素。 這些詞的標記是不同的,我面臨一些問題。

  1. 在跨度之前或之后直接單擊並鍵入文本時,文本將具有與跨度相同的標記。 在僅具有跨度的行上添加單詞非常困難。 我想通過填補跨度來解決這個問題  但它看起來有點奇怪。
  2. 用戶可以單擊跨度並更改它,我希望用戶單擊跨度並在更改之前選擇替換或忽略選項。 換句話說,它需要被鎖定。 我想通過capturig keyup來做這件事,如果它來自一個跨度然后是e.preventDefault(),但編程它有點痛苦。

所以我的問題是:

是否有一種簡單的方法可以將一個span元素鎖定在一個contenteditable中,不涉及捕獲key和preventDefault(尚未嘗試過,甚至不確定它是否可行)?

當單擊或直接移動光標旁邊的光標並鍵入文本時,它將成為跨度的一部分,有沒有辦法讓它不是跨度的一部分?  填充跨度 可能會工作,但當跨度是該行的第一個單詞時,它看起來很奇怪。 為了說明這一點,我在下面發布了一個示例html文件:

<!DOCTYPE html>
<html>
 <head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<title>Example</title>
</head>
 <body>
   <div contenteditable="true"></div>
   <script type="text/javascript">
    document.getElementsByTagName("div")[0]
      .innerHTML="<span style='color:green'>hello</span>"
   </script>
 </body>
</html>

在可編輯容器內標記范圍contenteditable =“false”。 它會同時解決這兩個問題。

至於contenteditable div中的鎖定元素; 我正在使用需要鎖定的跨度,並且它們不會觸發keydown事件,因此在div上設置事件並檢查范圍是否為鎖定元素。

我正在使用谷歌閉包庫,所以獲得范圍很簡單:

goog.events.listen(document.getElementById("userInput"),//userInput= contenteditable div
   [goog.events.EventType.KEYDOWN,
    goog.events.EventType.PASTE],
   function(e){
       if(32<e.keyCode&&e.keyCode<41){//page up,down,home,end and arrow
           return;
       }
       var el=goog.dom.Range.createFromWindow()
         .getContainerElement();
       if(el.className.indexOf("locked")!==-1){
           e.preventDefault();
       }
});

我將研究填充鎖定的跨度與&nbsp; 如果在元素之前或之后不存在空格,並在獲得解決方案后將其發布在此處。

結束填充跨度而不檢查,因為無論如何將在以后刪除額外的空格。 看起來很有趣,但最好不能添加文字。

如何使用js模擬輸入那些<div contenteditable="“true”">元素。謝謝</div><div id="text_translate"><pre>&lt;div contenteditable="true" style="width: 509px;" id="test"&gt;&lt;/div&gt; document.getElementById("test").value=1231 document.getElementById("test").innerText=1231 document.getElementById("test").innerHTML=1231</pre><p> 當我點擊提交按鈕時,上述方法均無效。</p><p> 我想知道我是否必須觸發事件來保存值</p><p>但我不知道如何創建事件</p><p>以下方法適用於輸入事件,但不適用於</p><pre>&lt;input type="text" id="test2"&gt; window.inputValue(document.getElementById("test2"),"simulation_string") window.inputValue = function (dom, st) { var evt = new InputEvent('input', { inputType: 'insertText', data: st, dataTransfer: null, isComposing: false }); dom.value = st; dom.dispatchEvent(evt); }</pre></div>

[英]how to use js simulation input those <div contenteditable =“true”> elements.thanks

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 不刪除 div 中 contenteditable 設置為 true 的子元素 使用 contenteditable=true 設置 div 的值 如何禁用contenteditable div中的元素? 如何使用js模擬輸入那些<div contenteditable="“true”">元素。謝謝</div><div id="text_translate"><pre>&lt;div contenteditable="true" style="width: 509px;" id="test"&gt;&lt;/div&gt; document.getElementById("test").value=1231 document.getElementById("test").innerText=1231 document.getElementById("test").innerHTML=1231</pre><p> 當我點擊提交按鈕時,上述方法均無效。</p><p> 我想知道我是否必須觸發事件來保存值</p><p>但我不知道如何創建事件</p><p>以下方法適用於輸入事件,但不適用於</p><pre>&lt;input type="text" id="test2"&gt; window.inputValue(document.getElementById("test2"),"simulation_string") window.inputValue = function (dom, st) { var evt = new InputEvent('input', { inputType: 'insertText', data: st, dataTransfer: null, isComposing: false }); dom.value = st; dom.dispatchEvent(evt); }</pre></div> 插入符號不在 div 上的跨度(contenteditable=“false”)之間(contenteditable=“true”) 可編輯的true元素和可編輯的false元素旁邊的插入符號行為 如何將 div contenteditable 從 true 更改為 false 添加了contenteditable =“true”的DIV不會關注點擊 在ios中顯示div的鍵盤與contenteditable =“true” 如何使div可拖動和contenteditable =“ true”?
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM