简体   繁体   English

获取在contenteditable中被更改的元素

[英]Get element being changed in contenteditable

How do I get the element that is being edited? 如何获取正在编辑的元素?

HTML HTML

<div contenteditable=true>
  <pre>
    <span class="1">First line</span>
    <span class="2">Second line</span>
  </pre>
</div>

When I'm editing "First line", how do I check which span class is being edited? 在编辑“第一行”时,如何检查正在编辑的跨度类?

JS JS

window.addEventListener("input", inputHandler, false);
function inputHandler(e) {
  console.log(e.target);
}

Prints out the entire div class: 打印出整个div类:

<div contenteditable=true>
  <pre>
    <span class="1">First line</span>
    <span class="2">Second line</span>
  </pre>
</div>

But I just want to get <span class="1">First line</span> 但我只想获取<span class="1">First line</span>

Span element can't have input/keypress/keyup ... events and those events can't be registered on it. Span element不能具有input/keypress/keyup ... events并且这些events也不能在其上注册。 Although there are other ways to accomplish this, you could alternatively use DOMCharacterDataModified event, check the snippet below. 虽然有其他的方法来做到这一点,你可以选择使用DOMCharacterDataModified事件,请检查下面的代码片段

 var div = document.getElementById("edit"); div.addEventListener("DOMCharacterDataModified", inputHandler, false); function inputHandler(e) { var elem = e.target.parentNode; alert("Element: " + elem.tagName + " class name: " + elem.className); } 
 <div id="edit" contenteditable=true> <pre> <span class="1">First line</span> <span class="2" >Second line</span> </pre> </div> 

You must affect the contenteditable attribute individually to each piece you plan to modify. 您必须对计划修改的每个部分分别影响contenteditable属性。
You'll have to choose how to add event listener to all of them. 您必须选择如何向所有事件监听器添加事件监听器。 For instance, like this: 例如,像这样:

 var editables = document.getElementsByClassName('editable'); for (var editable of editables) { editable.addEventListener("input", inputHandler, false); } function inputHandler(e) { console.log(e.target); } 
 <div> <pre> <span class="editable 1" contenteditable>First line</span> <span class="editable 2" contenteditable>Second line</span> </pre> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM