如何在我的 <a> 标签中返回内部 HTML
How can return the innerHTML inside my <a> tag?
var checklist = document.getElementById("my-ul");
var items = checklist.querySelectorAll("a");
console.log(checklist);
console.log(items);
for (var i = 0; i < items.length; i++) {
items[i].addEventListener("click", returnLetter);
}
function returnLetter() {
alert(items.innerHTML);
}
<ul id="my-ul" class="pager">
<li><a href="#">A</a>
</li>
<li><a href="#">B</a>
</li>
<li><a href="#">C</a>
</li>
<li><a href="#">D</a>
</li>
<li><a href="#">E</a>
</li>
<li><a href="#">F</a>
</li>
<li><a href="#">G</a>
</li>
<li><a href="#">H</a>
</li>
<li><a href="#">I</a>
</li>
</ul>
我的 javascript 似乎没有返回任何内容,警报打印出"未定义",但我无法弄清楚我的问题在哪里。我的目标是返回与用户单击的按钮/链接相对应的字母。
您需要
在事件侦听器上使用this
。例如,您的代码可以重写为
for (var i = 0; i < items.length; i++) {
items[i].addEventListener("click", clickCallback);
}
function clickCallback() {
alert(this.innerHTML);
}
现在,您的returnLetter()
函数正在尝试打印出每个item
的innerHTML
。若要解决此问题,请仅通过将该项传递给函数来提醒该项的innerHTML
,如下所示:
for (var i = 0; i < items.length; i++) {
items[i].addEventListener("click", alertValue);
}
function alertValue() {
alert(this.innerHTML);
});
事件处理程序函数中的this
将指向正在单击的元素(调用事件处理程序(,而不是指向 items
数组。
请参阅 JSFiddle.net 的工作示例。
它返回undefined
.querySelectorAll()
返回一个 NodeList,而items
是一个 NodeList,这意味着它没有 innerHTML
属性。您需要访问节点列表中元素的属性。
您可以传递单击元素的索引:
这里的例子
for (var i = 0; i < items.length; i++) {
items[i].addEventListener("click", returnLetter.bind(items[i], i));
}
function returnLetter(i) {
console.log(items[i].textContent);
}
但是,更好的选择是使用 this
关键字来获取对事件发生的元素的引用。我还建议使用 .textContent
属性:
这里的例子
function returnLetter() {
console.log(this.textContent);
}
作为旁注,您也可以只将单个事件侦听器附加到父ul
元素,然后访问event.target
以获取对单击的a
元素的引用:
这里的例子
checklist.addEventListener("click", returnLetter);
function returnLetter(e) {
if (e.target.tagName === 'A') {
alert(e.target.textContent);
}
}
您应该使用 this.innerHTML
作为指向单击元素的this
。
var checklist = document.getElementById("my-ul");
var items = checklist.querySelectorAll("a");
console.log(checklist);
console.log(items);
for (var i = 0; i < items.length; i++) {
items[i].addEventListener("click", returnLetter);
}
function returnLetter() {
alert(this.innerHTML);
}
<ul id="my-ul" class="pager">
<li><a href="#">A</a>
</li>
<li><a href="#">B</a>
</li>
<li><a href="#">C</a>
</li>
<li><a href="#">D</a>
</li>
<li><a href="#">E</a>
</li>
<li><a href="#">F</a>
</li>
<li><a href="#">G</a>
</li>
<li><a href="#">H</a>
</li>
<li><a href="#">I</a>
</li>
</ul>
相关文章:
- react-让一个元素返回两个相邻的<tr>标签
- 虽然我更改了标签的文本,但它仍然返回初始值,我该如何解决
- Angular,GitHub API,返回存储库和标签
- 如何使用此 JavaScript 返回带有特定哈希标签的推文
- 返回标签的文本值,并在每个标签后附加换行符
- 当标签值与使用 JavaScript 的输入匹配时,返回 XML 标签属性
- Facebook标签/页面身份验证问题:getLoginStatus总是返回not_authorized
- Chrome MediaStreamTrack.getSources() 返回带有空标签的源
- jquery ajax,每个帖子只返回一个标签
- 为什么这个网站返回包装在jQuery标签中的自动完成数据
- 如何在我的 标签中返回内部 HTML
- 在标签上单击返回其无线电组名称
- onclick返回false的标签;仍然可以点击
- s: submit在从java脚本访问值时返回标签值
- 重复一个函数调用7次,然后使用angularjs用返回值填充标签
- 如何停止滚动或移动下一个标签,如果我的javascript函数返回false
- getElementsByTagName()返回0自定义标签的结果
- 如何从HTML返回标签中获取值?
- jQuery根据标签标签从span标签返回文本
- 从标签返回文本,其中最外层的HTML标签适用于jquery中的所有文本节点