带有与Mootools的target_blank链接的Pb

时间:2011-02-11 15:35:58

标签: javascript mootools

在Joomla 1.6架构中,我想使用window.location.hostname将target_blank应用于所有外部链接。

我的(不太漂亮)代码因此: http://jsfiddle.net/Y54Me/

但是可以看出,这不适用,因为我想要某种href,比如href =“javascript :;”。

我很乐意得到任何建议。

TKS。

2 个答案:

答案 0 :(得分:0)

在这一行:

if(link.hostname != window.location.hostname) {
    link.addClass('external');

更改为

    if(link.hostname != window.location.hostname && !link.hostname.search('javascript:')) {
        link.addClass('external');

答案 1 :(得分:0)

如果您的本地链接不包含域名,您可以通过CSS2定位它们:

a[href^="http://"], a[href^="https://"], a[href^='javascript'], a[href^='#'] {
    background: url('http://code.google.com/webtoolkit/tools/gwtdesigner/userinterface/images/globe3.png') 100% 60% no-repeat;
    padding:  0 25px 0 0;
}

并通过$$:

的选择器进行匹配
// 1.12
$$("a[href^='http://'], a[href^='https://'], a[href^='javascript'], a[href^='#']").addClass("external");

// or for mootools 1.2.5+ 
document.getElements("a[href^='http://'], a[href^='https://'], a[href^='javascript'], a[href^='#']").addClass("external").addEvent("click", somefunc);

不需要循环,正则表达式,字符串操作等。

否则,您可以通过以下方式过滤上述结果:

var hostname = "jsfiddle.net";

$$("a[href^='http://'], a[href^='https://'], a[href^='javascript'], a[href^='#']").filter(function(link) {
    return !link.get("href").contains(hostname);
}).addClass("external");

http://www.jsfiddle.net/dimitar/Y54Me/1/http://www.jsfiddle.net/dimitar/Y54Me/2/ for 1.12(.getProperty而不是.get)

最后。而不是将点击事件附加到它们然后再打开window.open,为什么不改为.set("target", "_blank")呢?这是最具语义和干净的方法。