2012-02-15 127 views
0

我有这样的HTML:在window.open函数,前缀的URL的jQuery

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

有人在这个网站能为我提供的脚本与域http://www.example.com/这里前缀的URL脚本:

$(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=4ID=5按预期签署,他们都与ID=4签署。
的想法是,每个window.open功能应该与http://www.example.com前缀然而,URL的其余部分应保持不变...

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

我希望我已经清楚,你可以帮助我。 谢谢。

回答

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')); 
}); 
+2

不幸的是,HTML不在我的控制之下。我已经无数次听到过同样的事情,很久以前就会这样做了...... – henryaaron 2012-02-15 03:34:51

+0

啊,只有权限在前端的烦恼。 – prodigitalson 2012-02-15 03:35:58

+0

Yesss ...它杀了我。也许有一天,我将能够编写自己的软件;) – henryaaron 2012-02-15 03:44:27

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/')); 
});​ 

不过,我不认为使用链接与#一个hrefonclick打开一个窗口,是语义因为它可能是。如果可能的话,请尝试更改的标记,以这样的:

<a href="TrackPackage.asp?ID=4" target="_blank">Track Your Package »</a> 

现在,如果有人好奇它会导致他们的浏览器可以显示有用的在状态栏中的东西,当你在它悬停。

如果您需要进一步调整行为,请添加一个类并绑定到click事件。当他们点击时,阻止默认操作并自己打开窗口,就像以前一样。

+0

这实际上是让其他的问题对我来说...它无法计算未定义功能。原来的jQuery的作品...我需要另一个脚本。 – henryaaron 2012-02-15 03:42:29

+0

不幸的是,HTML不在我的控制之下。我已经多次听到同样的事情,并且很久以前会这样做...... – henryaaron 2012-02-15 03:43:10