在鼠标位置/悬停时获取链接的href的功能(类似于Chromium中的复制链接位置)

时间:2015-08-02 13:44:50

标签: javascript

我正在尝试使用JavaScript获取当前悬停链接的href,以便在新标签中打开该链接。

我可以使用以下方法获取当前页面的href:

var myLink = window.location.href;

然后致电:

window.open(myLink);

但是我想调用一些JavaScript函数来返回鼠标下元素的链接(就像右键单击然后选择复制链接位置在Chromium或Firefox浏览器中一样)。

修改: 我试过这个:

(function(){
    var list = document.querySelectorAll( 'a' );
    var myString = "myString_Default_Value";
    for ( var i = 0; i < list.length; i ++)
      list.item(i).onmouseover = function() { myString = this.href; };
    return myString;
})();

我这样做的原因是因为我将外部匿名方法作为字符串从我的.NET应用程序传递(不用担心,我在代码中转义了双引号)然后使用JS进行回调结果(在这种情况下,它是一个字符串结果)。

不幸的是,在我的应用程序中,我不断获得 myString 的默认值。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

如果你想要的只是在新标签页中打开一些链接,只需在新标签页中将target="_blank"(或target="_new")添加到您想要的任何链接。

//[].forEach.call allows calling .forEach on array-like objects.
[].forEach.call(document.querySelectorAll('a'), function(link) {
    if (shouldBeInNewTab(link.href)) { link.target = "_blank"; }
});

您通常做的是将事件侦听器添加到页面上的所有链接,如下所示:

[].forEach.call(document.querySelectorAll('a'), function(link) {
    link.addEventListener('mouseover', function(event) {
        console.log(this.href); // `this` being the element triggering the event.
    });
});

但这有缺点:

  • 这很浪费,如果页面上有5000个链接,则必须循环5000个项目,并在每个项目上添加一个事件监听器。
  • 它不适用于新的DOM节点。如果您使用JavaScript添加链接,则在悬停时不会报告其href。

所以我们可以用事件委托解决这个问题,基本上,我在一个共同的祖先(在这种情况下,document)添加一个监听器,并在内部过滤项目。 / p>

document.addEventListener('mouseover', function(event) {
    var hoveredEl = event.target; // The actual element which was hovered.
    if (hoveredEl.tagName !== 'A') { return; } // Ignore non links
    console.log(hoveredEl.href); // Do what we want here!
});

答案 1 :(得分:0)

您可以使用jQuery这样做:

&#13;
&#13;
$('a').on('mouseover', function(){ console.log( this.href ) } )
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li><a href="#one">One</a></li>
  <li><a href="#two">Two</a></li>
</ul>
&#13;
&#13;
&#13;

没有jQuery的JS:

var list = document.querySelectorAll( "a" );
for ( var i = 0; i < list.length; i ++)
  list.item(i).onmouseover = function() { console.log(this.href ) };

答案 2 :(得分:0)

我们走了:

HTML:

<a id="myLink" href="http://www.google.es">Click here</a>

JS:

document.querySelector("#myLink").onmouseover = function(){
    window.open(this);
}

http://jsfiddle.net/3rb10xf0/

编辑:好的,这不回答这个问题,无论如何我都是通过OP的请愿书把它保存在这里。