我正在试图劫持button
元素,以便我可以在新窗口中打开它的链接。我添加了一个新属性,需要在名为data-ext-link="true"
的新窗口中打开这些元素。在某些情况下,button
元素的onclick
包含我需要将用户发送到的location.href
。如何使用jquery抓取location.href
,以便我可以将其提供给我的函数中的window.open
?
下面的函数非常适用于锚元素,但是它位于我的is('button')
if
语句中,它会变得毛茸茸并且不起作用,因为attr()
返回一个对象而不是一个字符串。它返回的对象如下:
<button data-ext-link="true" onclick="location.href='http://website/url_i_want'" class="btn2">Open it up</button>
function onclick(event) {
location.href = "http://website.com/url_i_want";
}
function extLinks() {
var extLinks = $('a[data-ext-link="true"], button[data-ext-link="true"]');
$.each(extLinks, function(){
if($(this).is('button')){
var link = $(this).attr('onclick'); // Here it needs to be a string.
link = link.match(/location.href='(.*)'/); //Won't work because it's an object.
link = link[1];
} else {
var link = $(this).attr('href');
}
$(this).unbind('click.extLink').bind('click.extLink',function(e){
e.preventDefault();
window.open(link);
});
});
}
我发现了以下相关问题,建议使用$.live
弃用我会使用$.delagate()
代替,但这并不能完全解决我需要告诉此按钮打开的问题一个新窗口,使用location.href
内的onclick
值作为目标。
function extLinks() {
var extLinks = $('a[data-ext-link="true"], button[data-ext-link="true"]');
$.each(extLinks, function(){
if($(this).is('button')){
var link = this.onclick.toString().match(/location\.href\s*=\s*['"]([^'"]*)['"]/)[1];
} else {
var link = $(this).attr('href');
}
$(this).unbind('click.extLink').bind('click.extLink',function(e){
e.preventDefault();
window.open(link);
});
});
}
答案 0 :(得分:0)
尝试将函数转换为字符串:
var link = $(this).attr('onclick').toString();
注意 - 我不知道这是否适用于所有浏览器。虽然在Firefox和IE7中适用于我。
此外,您可能需要修改正则表达式 - 它不适用于您发布的示例。试试这个:
/location\.href\s*=\s*['"]([^'"]*)['"]/
我已经确认此解决方案对我有用。这是一个示例页面:http://nylen.tv/test-onclick.html