想知道是否有好的方法可以做到这一点,我想我会发布到SO社区......
有一个第三方网页,我无法控制它的呈现方式,但它们允许我添加JQuery。
使用JQuery,我在页面的侧面创建一个导航菜单,它将是一个链接列表。我从页面上现有的onclick事件获得这些链接的onclick事件,但是当我这样做时:
var linkLoc = $('#theLink').attr("onclick");
linkLoc返回:
function onclick(event) {
handleJumpTo("com.webridge.entity.Entity[OID[E471CB74A9857542804C7AC56B1F41FB]]", "smartform");
}
而不是我期望的:
handleJumpTo("com.webridge.entity.Entity[OID[E471CB74A9857542804C7AC56B1F41FB]]", smartform");
我认为JQuery正试图获取绑定事件,但我需要实际的Javascript标记,因为我正在动态创建HTML。我想我可以将“函数onclick(event){”排除在外,但看起来有点像hacky。
我可以通过优雅方式获得onclick标记吗?
答案 0 :(得分:3)
$("#theLink")
将返回一个jQuery对象,而$("#theLink")[0]
将返回一个DOM对象。这是$("#thelink")[0].getAttributeNode('onclick').value
可以使用的resson。
答案 1 :(得分:2)
“onfoo”属性的值为函数,而不是字符串。语义:
<whatever onclick='code code code'>
是浏览器构造一个函数对象,就好像你有代码那样:
document.getElementById('whatever').onclick = new Function("event", "code code code");
因此你并不真正需要原始字符串,因为你有更好的东西:函数本身,准备被调用。然后,您可以通过JavaScript代码将其作为处理程序绑定到其他元素,而不是HTML(这实际上是一种更好的方法)。你说,你正在使用jQuery,所以你可以使用jQuery“.bind()”API将这些函数绑定到你需要的任何元素。
您还应该知道,还有其他方法可以将事件处理程序绑定到元素,这将使“onfoo”属性完全取消设置。
答案 2 :(得分:2)
$('#theLink').attr("onclick")
的类型是一个函数,因此您可以在将事件绑定到链接时使用它。
var linkLoc = $('#theLink').attr("onclick");
$('a#link1').live('click', linkLoc);
如果需要,您也可以在点击处理程序中运行其他代码:
var linkLoc = $('#theLink').attr("onclick");
$('a#link1').live('click', function(e){
// Code...
linkLoc(e);
});
答案 3 :(得分:1)
如果我明白你要去哪里,你应该可以直接将返回的onclick功能分配到新的nav元素的onclick ......
$('#NewNavElement').click($('#theLink').attr('onclick'));
如果您需要向处理程序添加其他代码,则可以绑定另一个单击处理程序。
答案 4 :(得分:0)
试试这个;
$('#theLink').getAttributeNode('onclick').value
根据评论修改:
$('#theLink').get().getAttributeNode('onclick').value