【问题标题】:Get id of elem changed when event is attached to document将事件附加到文档时获取元素更改的 id
【发布时间】:2018-06-15 15:37:56
【问题描述】:

注意事项:

  • 整个文档是content editable
  • 主体附有input event
  • 我需要获取已更改的特定元素的ID
  • 只允许 vanilla Javascript

例如:如果我将 Tom 更改为 Paul,我应该得到 m1 作为 id。

问题e.target 返回 body 元素而不是 specifc 元素(div#m1)

document.body.contentEditable = true;
document.body.addEventListener('input', e => {
  console.log(e.target)
})
<div id="m1">Hello Tom</div>
<div id="m2">Hello Sam</div>

【问题讨论】:

    标签: javascript contenteditable event-capturing


    【解决方案1】:

    一个问题是 - 如果整个正文是可编辑的,那么当您的用户开始编辑时,您如何知道哪些元素将保留、或完全删除,甚至添加?

    您是否可以将每个不同的元素单独标记为可编辑?按照下面的sn-p。

    document.getElementById('m1').contentEditable = true;
    document.getElementById('m2').contentEditable = true;
    
    document.body.addEventListener('input', e => {
      console.log(e.target)
    })
    <div id="m1">Hello Tom</div>
    <div id="m2">Hello Sam</div>

    当然,也可以使用循环将每个元素设置为可编辑,不重复代码并自动适应不同的文档结构。

    【讨论】:

    • 这可能是一个建议,但却是解决方案。
    • 我知道你的意思,但在我的场景中,只有整个正文是内容可编辑的,我需要触及它的元素
    【解决方案2】:

    我在您的控制台中添加了e.target.id。希望这对你有用

    document.body.contentEditable = true;
    document.body.addEventListener('input', e => {
      console.log(e.target.id);
    })
    <div id="m1">Hello Tom</div>
    <div id="m2">Hello Sam</div>

    【讨论】:

    • 它不起作用,因为e.target 正在返回正文,我需要确切的div element
    • 我已经检查过了,它将返回进行更改的元素。你在更新这些元素吗?因为如果您在浏览器控制台中尝试相同的代码。说在同一个堆栈溢出选项卡中执行并尝试在上面的搜索中输入然后你会得到搜索元素 ID 目前它在这种情况下是空白的
    • 是的,在 stackoverflow 的情况下为空白。因为搜索框没有id
    • 如果我没有在文本编辑器中更新元素,为什么 id 为空白?
    • 更新元素是什么意思?改变元素或元素本身的值?
    猜你喜欢
    • 2019-11-12
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多