Javascript 如何使用attachListener获取链接的属性?
我试过jQuery和javascript,但都不能带来链接的属性。这是我正在使用的代码-这不是在callme函数的警报中打印任何内容Javascript 如何使用attachListener获取链接的属性?,javascript,javascript-events,Javascript,Javascript Events,我试过jQuery和javascript,但都不能带来链接的属性。这是我正在使用的代码-这不是在callme函数的警报中打印任何内容 function callMe() { var ll = this; var id1 = ll.getAttribute('id'); alert('Inside callMe...'+id1); } function load() { var lnk = new Array(); lnk = document.getElementsByTag
function callMe() {
var ll = this;
var id1 = ll.getAttribute('id');
alert('Inside callMe...'+id1);
}
function load() {
var lnk = new Array();
lnk = document.getElementsByTagName("a");
var len = lnk.length;
for (var i=5;i<len;i++){
var id = lnk[i].getAttribute('data-id');
lnk[i].attachEvent('onclick',callMe);
}
您是否在页面加载完成之前运行此代码?这必须位于
的末尾,或者在窗口上调用。onload
或(在jQuery中)调用$(文档)。ready
此外,attachevent不是跨浏览器的
当使用MS专有时,被调用侦听器的this关键字不会设置为调用侦听器的元素(使用W3C方法或HTML内部事件处理程序时也是如此)。对此有许多修复方法,通常是使用关联的事件对象,因此函数变为:
function callMe(evt) {
var evt = evt || window.event;
var ll = evt.target || evt.srcElement;
> var id1 = ll.getAttribute('id');
标准DOM属性不需要使用getAttribute:
var id1 = ll.id;
创建一个数组并将其分配给lnk只是为了立即用getElementsByTagName返回的NodeList替换它,这没有多大意义。另外,您似乎在寻找链接,因此最好访问document.links集合,该集合已经可用,并且只包含链接,而getElementsByTagName('a')将包含所有a元素,包括锚
因此,上述两行可以是:
var lnk = document.links;
注意,事件是等效的HTML内部事件名称,不带前导“on”。因此,附加侦听器成为:
addEvent(lnk[i], 'click', callMe);
此外,该函数应该在文档准备就绪后运行,因此可以使用正文的onload属性window.onload,或者将脚本放在结束正文标记之前
最后,别忘了调用load。以下是重构的整个脚本:
<a href="#" id="link0">Link0</a>
<a href="#" id="link1">Link1</a>
<a href="#" id="link2">Link2</a>
<a href="#" id="link3">Link3</a>
<a href="#" id="link4">Link4</a>
<a href="#" id="link5">Link5</a>
<script type="text/javascript">
function addEvent(el, evt, fn) {
if (el.addEventListener) {
el.addEventListener(evt, fn, false);
} else if (el.attachEvent) {
el.attachEvent('on' + evt, fn);
}
}
function callMe(evt) {
var evt = evt || window.event;
var ll = evt.target || evt.srcElement;
var id1 = ll.id;
alert('Inside callMe...'+id1);
}
function load() {
var lnk = document.links;
var len = lnk.length;
for (var i=5; i<len; i++) {
var id = lnk[i].getAttribute('data-id');
addEvent(lnk[i], 'click', callMe);
}
}
load();
</script>
功能加法器(el、evt、fn){
如果(el.addEventListener){
el.addEventListener(evt、fn、false);
}否则,如果(见附件){
el.attachEvent(‘on’+evt,fn);
}
}
函数调用名(evt){
var evt=evt | | window.event;
var ll=evt.target | | evt.src元素;
var id1=ll.id;
警报('内部呼叫…'+id1);
}
函数加载(){
var lnk=document.links;
var len=lnk.长度;
对于(var i=5;这是一个很好的解释!非常感谢您的回复。现在我需要jQuery equallent来完成以下内容。请帮助。var request=document.getElementById('request_'+id1),response=document.getElementById('response_'+id1);modifyText(request.firstChild.nodeValue,response.firstChild.nodeValue);
var lnk = document.links;
> var len = lnk.length;
>
> for (var i=5; i<len; i++) {
> var id = lnk[i].getAttribute('data-id');
> lnk[i].attachEvent('onclick',callMe);
function addEvent(el, evt, fn) {
if (el.addEventListener) {
el.addEventListener(evt, fn, false);
} else if (el.attachEvent) {
el.attachEvent('on' + evt, fn);
}
}
addEvent(lnk[i], 'click', callMe);
> }
> }
<a href="#" id="link0">Link0</a>
<a href="#" id="link1">Link1</a>
<a href="#" id="link2">Link2</a>
<a href="#" id="link3">Link3</a>
<a href="#" id="link4">Link4</a>
<a href="#" id="link5">Link5</a>
<script type="text/javascript">
function addEvent(el, evt, fn) {
if (el.addEventListener) {
el.addEventListener(evt, fn, false);
} else if (el.attachEvent) {
el.attachEvent('on' + evt, fn);
}
}
function callMe(evt) {
var evt = evt || window.event;
var ll = evt.target || evt.srcElement;
var id1 = ll.id;
alert('Inside callMe...'+id1);
}
function load() {
var lnk = document.links;
var len = lnk.length;
for (var i=5; i<len; i++) {
var id = lnk[i].getAttribute('data-id');
addEvent(lnk[i], 'click', callMe);
}
}
load();
</script>