javascript - 使用事件处理程序包装器获取按钮的 html 内容
问题描述
我正在使用包装器将事件处理程序附加到页面上的某些按钮。使用以下代码,我可以在单击每个按钮时获取按钮 ID。但是,我需要获取 pre 标签的内容并将两个 div 的内容连接起来,以便在单击每个按钮时创建一个命令。
有人可以帮忙吗。
const wrapper = document.getElementById('wrapper');
wrapper.addEventListener('click', (event) => {
var parent=event.target.parentElement;
console.log(parent.getElementsByTagName('pre')[0].innerHTML);
const isButton = event.target.nodeName === 'BUTTON';
if (!isButton) {
return;
}
})
<div id="wrapper">
<div class="command">
<p>description 1</p>
<div>
<pre><div>kubectl </div><div>create cluster</div></pre>
</div>
<button id="button1" class="demo-button-small">Run</button>
</div>
<div class="command">
<p>description 2</p>
<div>
<pre><div>kubectl </div><div>delete cluster</div></pre>
</div>
<button id="button2" class="demo-button-small">Run</button>
</div>
<div class="command">
<p>description 3</p>
<div>
<pre><div>kubectl </div><div>list cluster</div></pre>
</div>
<button id="button3" class="demo-button-small">Run</button>
</div>
</div>
解决方案
用于.closest()
查找包含的 DIV,然后用于.querySelector()
查找其中的<pre>
标签并获取其innerText
.
const wrapper = document.getElementById('wrapper');
wrapper.addEventListener('click', (event) => {
const isButton = event.target.nodeName === 'BUTTON';
if (!isButton) {
return;
}
const div = event.target.closest("div.command");
if (div) {
const pre = div.querySelector("pre");
if (pre) {
console.log(pre.innerText);
}
}
})
<div id="wrapper">
<div class="command">
<p>description 1</p>
<div>
<pre><div>kubectl </div><div>create cluster</div></pre>
</div>
<button id="button1" class="demo-button-small">Run</button>
</div>
<div class="command">
<p>description 2</p>
<div>
<pre><div>kubectl </div><div>delete cluster</div></pre>
</div>
<button id="button2" class="demo-button-small">Run</button>
</div>
<div class="command">
<p>description 3</p>
<div>
<pre><div>kubectl </div><div>list cluster</div></pre>
</div>
<button id="button3" class="demo-button-small">Run</button>
</div>
</div>
推荐阅读
- javascript - dayjs 返回格式错误的日期
- xml - 如何修复“此文档已经有一个 'DocumentElement' 节点。”
- php - 此路由不支持 put
- html - 如何处理引导程序中的网格,网格内的网格
- javascript - JS过滤器/映射来获取对象之间
- c# - 当我打开一个新表单两次时,OpenForms 不会运行
- python - 'tensorflow_core.estimator' 没有属性'inputs',为什么会发生这种情况?
- sql - 将表名和行信息传递到 INSERT INTO 存储过程
- python - 设置现有 numpy 对象的 __hash__
- reactjs - 在.net core react app中获取环境变量以显示,使用azure设置环境变量