从jquery对象中提取onclick location.href作为字符串

从jquery对象中提取onclick location.href作为字符串,jquery,string,onclick,Jquery,String,Onclick,我试图劫持一个按钮元素,以便在新窗口中打开它的链接。我添加了一个新属性,即需要在名为data ext link=“true”的新窗口中打开的元素。在某些情况下,按钮元素有一个onclick,其中包含我需要将用户发送到的位置href。如何使用jquery获取该location.href,以便将其提供给窗口。在我的函数中打开 下面的函数对于锚元素非常有用,但它在我的is('button')if语句中,因为attr()返回一个对象而不是字符串,所以它变得很复杂,不起作用。它返回的对象如下所示: 我的按

我试图劫持一个
按钮
元素,以便在新窗口中打开它的链接。我添加了一个新属性,即需要在名为
data ext link=“true”
的新窗口中打开的元素。在某些情况下,
按钮
元素有一个
onclick
,其中包含我需要将用户发送到的
位置href
。如何使用jquery获取该
location.href
,以便将其提供给
窗口。在我的函数中打开

下面的函数对于锚元素非常有用,但它在我的
is('button')
if
语句中,因为
attr()
返回一个对象而不是字符串,所以它变得很复杂,不起作用。它返回的对象如下所示:

我的按钮代码: 我的职能: 更新: 我发现以下相关问题,建议使用
$.live
,我不推荐使用
$.delagate()
,但这并不能完全解决我需要告诉此按钮在新窗口中使用
位置打开的问题。href
值在
onclick
中作为目标

解决方案:
尝试将函数转换为字符串:

var link = $(this).attr('onclick').toString();
注意-我不知道这是否适用于所有浏览器。不过在Firefox和IE7中对我有效


另外,您可能需要修改您的正则表达式-它对您发布的示例不起作用。试试这个:

/location\.href\s*=\s*['"]([^'"]*)['"]/


我已确认此解决方案对我确实有效。下面是一个示例页面:

我认为即使附加了toString(),它仍然返回一个对象。避免创建jQuery对象,只使用
this.onclick.toString()
,不是更容易一些吗?顺便说一句,JS Fiddle演示确认最终结果是一个字符串:是的,
this.onclick
可以工作,但jQuery将使用“W3C首选”方式获取属性。也许我遗漏了一些东西,但您的解决方案(删除“typeof”)返回的结果与此完全相同<代码>函数onclick(event){console.log(this);}
这里肯定发生了其他事情。你能在这个方法不起作用的地方发布一个按钮的HTML代码吗?另外,您可能需要修改您的正则表达式-它对您给出的示例不起作用。@jnylen:我已经为我的问题添加了更多细节。我已经确认我的解决方案对我有效。看见此外,如果您控制整个页面的HTML,则可以非常轻松地重新构造代码,而不需要进行此类操作(例如,使用URL字典,或将URL放在按钮或链接元素的
数据URL
属性中)。
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);
        });
    });
}
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);
        });
    });
}
var link = $(this).attr('onclick').toString();
/location\.href\s*=\s*['"]([^'"]*)['"]/