在window.open函数jQuery中添加URL

时间:2012-02-15 03:25:57

标签: javascript jquery execution prefix multiple-instances

我有这个HTML:

<a href="#" onclick="window.open('TrackPackage.asp?ID=4', '', 'settings');">Track Your Package »</a>

此网站上的某位人员能够为我提供一个脚本,以便在网址前添加http://www.example.com/这个脚本:

$(document).ready(function(){
$('a[onclick^="window.open(\'TrackPackage.asp"]').attr('onClick', $('a[onclick^="window.open(\'TrackPackage.asp"]').attr('onClick').replace("window.open('", "window.open('http://www.example.com/"));
});

然而,我对此有点麻烦:
第一个问题是元素的多个实例。这是一个小提琴:http://jsfiddle.net/VMmZx/
不是一个锚用ID=4签名而另一个锚用ID=5签名,而是用ID=4签名。
这个想法是,每个window.open函数都应该以{{1​​}}为前缀,但是,网址的其余部分应该保持不变......

我遇到的第二个问题是当页面上不存在该元素时,jQuery的其余部分都会失败...
这是另一个小提琴:http://jsfiddle.net/VPf32/
http://www.example.com应该获得类<a>,但由于页面上不存在该元素,因此jQuery不会执行。
由于JavaScript包含在ASP.NET服务器的HTML模板中,因此可能会产生许多问题。

我希望我很清楚,你可以帮助我。 感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用.each()迭代每个匹配元素并单独更改它们:

$('a[onclick^="window.open(\'TrackPackage.asp"]').each(function(index, element) {
    element = $(element);
    element.attr('onclick', element.attr('onclick').replace(/open\('/, 'open(\'http://www.example.com/'));
});​

但是,我不认为使用href的{​​{1}}和#打开窗口的链接是尽可能语义的。如果可能,请尝试将标记更改为:

onclick

现在,如果有人好奇它会引导他们,那么当您将鼠标悬停在状态栏上时,浏览器可以显示有用的内容。

如果您需要进一步调整行为,请为<a href="TrackPackage.asp?ID=4" target="_blank">Track Your Package »</a> 事件添加一个类并绑定。当他们点击时,阻止默认操作并自己打开窗口,就像之前一样。

答案 1 :(得分:0)

为什么你这样做内联点击事件?我只想输出如下链接:

<a href="/path/to/file.html" target="_blank">Link Text</a>

然后:

$('a[target=_blank]').click(function(){
   var prefix = 'http://domain.com';
   window.open(prefix + $(this).attr('href'));
});