1

我们可以使用名称或 id 获取 HTML 元素的属性,如下所示:

document.getElementById('id').value; //Javascript** 

$('#id').attr('class');  // jquery to get corresponding elements class**

像这些有没有办法获得指定的事件?在 Html 方面,我这样做:

"<"input name='student' onclick='show()'">"

我的需要是,那么我们如何获得为输入学生指定的事件?

4

2 回答 2

1

不确定我明白,但你可以做类似的事情

var el  = document.getElementById("id"),
    arr = [];

for (var i=0, attrs=el.attributes, l=attrs.length; i<l; i++){
    if (attrs.item(i).nodeName.indexOf('on') === 0) {
        var o = {};
        o[attrs.item(i).nodeName] = attrs.item(i).nodeValue;
        arr.push(o);
    }
}

这将使所有内联事件处理程序附加到元素并放入一个数组中,如下所示:

[{'onclick' : 'show()'}, {'onmouseenter' : 'javascript:void(0)'}]

ETC...

小提琴

于 2013-06-20T05:59:09.613 回答
1
var attrs = $('input').get(0).attributes;
var f = Array.prototype.filter.call(attrs, isEvent); //Filter all attributes
//f now contains all attribute nodes that are events
f.forEach(function(e) { console.log(e.nodeName); });    

function isEvent(element) {
    return element.nodeName.startsWith('on');
}

对于以下输入标记,它将记录 onclick、onchange。适用于附加的内联事件或使用 JavaScript 创建的事件属性。

<input name='student' onclick='show()' onchange='return true;'/>

或者

var el = $('input').get(0);
el.setAttribute('onkeyup', function() {});
getEventsFor(el).forEach(function(e) {
    console.log(e.nodeName); //onSomeEvent
    console.log(e.nodeValue); // attached handler
});

function isEvent(element) {
    return element.nodeName.startsWith('on');
}

function getEventsFor(element) {
    var attrs = element.attributes;
    return Array.prototype.filter.call(attrs, isEvent);
}

JSFiddle

于 2013-06-20T05:46:16.303 回答