通过标签名称 [this] 获取元素?
get element by tag name [this]?
首先是一个简短的背景。所以我刚开始练习使用 API's。对于我现在正在使用的那个,我正在加载一个 DIV,其中有很多 link,我必须给出一个新的目的。我设法阻止了默认的 onclick 功能。现在我需要保存点击的 link "innerHTML" 属性。
var nextPage = document.getElementsByTagName("a")[this].innerHTML;
我尝试使用 [this] 定位点击的 link,但没有成功。希望你明白我想做什么。如果是这样,我有什么办法可以解决这个问题吗?
谢谢!
编辑:
$("#content, a").click(function(event){
event.preventDefault();
var x = document.getElementsByTagName("a")[0].innerHTML;
console.log(x)
getPage(x);
});
this.innerHTML
可以完成这项工作,如果我的理解正确的话。
如果您要在其中获取整个 html,则可以将 onclick 事件绑定到锚点本身,如果可能的话,可以对其进行处理。
<a onclick="clicked(this)">Click me</a>
function clicked(element) {
// Do whatever needed
// element.innerHTML will change it's innerHTML
}
你也可以点赞以下
$("#content, a").click(function(event){
event.preventDefault();
event.target.innerHTML = "Whatever";
})
为此使用 jQuery:
$('a').on('click', function(){
// this will run with every click, and 'this' will be your clicked item
console.log(this.innerHTML);
// although you probably want:
console.log($(this).attr('href'));
});
使用 jQuery 可以让您的代码更简洁,并统一您在直接使用 DOM api.
处理时可能遇到的跨浏览器兼容性问题
首先 document.getElementsByTagName("a")[this].innerHTML;
将 return undefined
因为它将 return html 节点的集合并且它必须传递索引而不是 this
.
因为您已经点击了一次,您可以试试这个代码:
function yourClickFunction(event) {
var target = event.target || event.srcElement;
var nextPage = target.innerHTML;
}
您可以使用常见的 class(下例中的 link
)来附加点击事件,然后只需使用 this.innerHTML
到 return 您点击的文本link.
希望对您有所帮助。
var classname = document.getElementsByClassName("link");
var clickFunction = function(){
//Prevent default
if ( event.preventDefault ) event.preventDefault();
event.returnValue = false;
//Get text
console.log(this.innerHTML);
}
for(var i=0;i<classname.length;i++){
classname[i].addEventListener('click', clickFunction, false);
}
<a href='link-1' class='link'>Link 1</a>
<a href='link-2' class='link'>Link 2</a>
<a href='link-3' class='link'>Link 3</a>
您可以向所有 a
标签元素添加 onclick
侦听器
var links = document.getElementsByTagName('a');
for (var i = 0, il = links.length; i < il; i++) {
links[i].onclick = clickHandler;
}
function clickHandler(event) {
console.log(this.innerHTML);
}
<a>Link a</a>
<a>Link b</a>
document.getElementsByTagName("a")
给你一个 HTMLAnchorElement 数组。数组的索引是从 0 到 n 的整数值。
this
在你的上下文中我认为它是 windows
对象(你的代码示例有点短所以我不得不猜测一下)
使用 window
作为需要整数的数组的索引当然不会给你任何东西。或者 undefined
准确地说。
有两种可能的方法可以满足您的需求:
onclick 处理程序
function hello(elem) {
console.log("you clicked on '" + elem.innerHTML + "'")
}
<a href="#" onclick="hello(this)">click me</a>
我在这里使用 onclick 属性 并将 this
上下文从 html 作为参数传递给我正在调用的函数。这很重要。
现在我可以通过引用收到的参数对被点击的元素进行操作。
出于某些原因或原因,我不建议使用此方法。但是既然你在问题中提到了 onclick 属性 ...
单击事件处理程序
这是我的首选解决方案
function hello(evt) {
var elem = event.target || event.srcElement;
console.log("you clicked on '" + elem.innerHTML + "'");
}
var link = document.getElementsByTagName("a")[0]
link.addEventListener("click", hello)
<a href="#">click me</a>
此处 html 中没有代码(或对代码的引用)。您改为从代码中检索 HTMLAnchorElement 并将侦听器附加到 click
事件。
现在只要单击 link 就会调用事件处理程序,默认情况下它将接收一个事件对象。您可以从该对象中提取 target
(生成事件的对象)并访问其属性。
首先是一个简短的背景。所以我刚开始练习使用 API's。对于我现在正在使用的那个,我正在加载一个 DIV,其中有很多 link,我必须给出一个新的目的。我设法阻止了默认的 onclick 功能。现在我需要保存点击的 link "innerHTML" 属性。
var nextPage = document.getElementsByTagName("a")[this].innerHTML;
我尝试使用 [this] 定位点击的 link,但没有成功。希望你明白我想做什么。如果是这样,我有什么办法可以解决这个问题吗?
谢谢!
编辑:
$("#content, a").click(function(event){
event.preventDefault();
var x = document.getElementsByTagName("a")[0].innerHTML;
console.log(x)
getPage(x);
});
this.innerHTML
可以完成这项工作,如果我的理解正确的话。
如果您要在其中获取整个 html,则可以将 onclick 事件绑定到锚点本身,如果可能的话,可以对其进行处理。
<a onclick="clicked(this)">Click me</a>
function clicked(element) {
// Do whatever needed
// element.innerHTML will change it's innerHTML
}
你也可以点赞以下
$("#content, a").click(function(event){
event.preventDefault();
event.target.innerHTML = "Whatever";
})
为此使用 jQuery:
$('a').on('click', function(){
// this will run with every click, and 'this' will be your clicked item
console.log(this.innerHTML);
// although you probably want:
console.log($(this).attr('href'));
});
使用 jQuery 可以让您的代码更简洁,并统一您在直接使用 DOM api.
处理时可能遇到的跨浏览器兼容性问题首先 document.getElementsByTagName("a")[this].innerHTML;
将 return undefined
因为它将 return html 节点的集合并且它必须传递索引而不是 this
.
因为您已经点击了一次,您可以试试这个代码:
function yourClickFunction(event) {
var target = event.target || event.srcElement;
var nextPage = target.innerHTML;
}
您可以使用常见的 class(下例中的 link
)来附加点击事件,然后只需使用 this.innerHTML
到 return 您点击的文本link.
希望对您有所帮助。
var classname = document.getElementsByClassName("link");
var clickFunction = function(){
//Prevent default
if ( event.preventDefault ) event.preventDefault();
event.returnValue = false;
//Get text
console.log(this.innerHTML);
}
for(var i=0;i<classname.length;i++){
classname[i].addEventListener('click', clickFunction, false);
}
<a href='link-1' class='link'>Link 1</a>
<a href='link-2' class='link'>Link 2</a>
<a href='link-3' class='link'>Link 3</a>
您可以向所有 a
标签元素添加 onclick
侦听器
var links = document.getElementsByTagName('a');
for (var i = 0, il = links.length; i < il; i++) {
links[i].onclick = clickHandler;
}
function clickHandler(event) {
console.log(this.innerHTML);
}
<a>Link a</a>
<a>Link b</a>
document.getElementsByTagName("a")
给你一个 HTMLAnchorElement 数组。数组的索引是从 0 到 n 的整数值。
this
在你的上下文中我认为它是 windows
对象(你的代码示例有点短所以我不得不猜测一下)
使用 window
作为需要整数的数组的索引当然不会给你任何东西。或者 undefined
准确地说。
有两种可能的方法可以满足您的需求:
onclick 处理程序
function hello(elem) {
console.log("you clicked on '" + elem.innerHTML + "'")
}
<a href="#" onclick="hello(this)">click me</a>
我在这里使用 onclick 属性 并将 this
上下文从 html 作为参数传递给我正在调用的函数。这很重要。
现在我可以通过引用收到的参数对被点击的元素进行操作。
出于某些原因或原因,我不建议使用此方法。但是既然你在问题中提到了 onclick 属性 ...
单击事件处理程序
这是我的首选解决方案
function hello(evt) {
var elem = event.target || event.srcElement;
console.log("you clicked on '" + elem.innerHTML + "'");
}
var link = document.getElementsByTagName("a")[0]
link.addEventListener("click", hello)
<a href="#">click me</a>
此处 html 中没有代码(或对代码的引用)。您改为从代码中检索 HTMLAnchorElement 并将侦听器附加到 click
事件。
现在只要单击 link 就会调用事件处理程序,默认情况下它将接收一个事件对象。您可以从该对象中提取 target
(生成事件的对象)并访问其属性。