使用jQuery选择访问的链接

时间:2009-07-31 06:03:09

标签: jquery

我正在尝试通过jQuery选择所有访问过的链接。这是HTML

<div class="question-summary">
    <a class="question-hyperlink">Stuff</a>
</div>

如果访问过question-hyperlink,我就选择question-summary。有什么想法吗?

4 个答案:

答案 0 :(得分:35)

我想应该提到的是,出于安全原因,已在浏览器中禁用了给定的方法。由于可以通过检查访问过的链接来检索访问者的历史记录,因此已采取某些措施来防止这种情况发生。

来源:Mozilla Foundation Blog.

已在Chrome和FF中签入 - 两者都不再支持$("a:visited")

答案 1 :(得分:7)

以下是选择:

$("a:visited").parent(".question-summary")

用法示例:

$("a:visited").parent(".question-summary").addClass("is_visited");

答案 2 :(得分:3)

我在Nevyan's Blog: Mark visited links using JavaScript and localStorage

上找到了基于LocalStorage的解决方法

他提出了干净的JavaScript代码来存储LocalStorage中页面用户点击的链接,并将“visit”类添加到<a>元素的父级:

function check_visited_links() {
    var visited_links = JSON.parse(localStorage.getItem('visited_links')) || [];
    var links = document.getElementsByTagName('a');
    for (var i = 0; i < links.length; i++) {
        var that = links[i];
        that.onclick = function() {
            var clicked_url = this.href;
            if (visited_links.indexOf(clicked_url) == -1) {
                visited_links.push(clicked_url);
                localStorage.setItem('visited_links', JSON.stringify(visited_links));
            }
        }
        if (visited_links.indexOf(that.href) !== -1) {
            that.parentNode.className += ' visited';
        }
    }
}

我不知道它是否比访问过程更安全。

答案 3 :(得分:0)

在这里输入代码`我不支持javascript,因为我也试图找到收集的方法:访问链接数据以隐藏访问过的节点。

一些参考: 隐私和:访问选择器 - CSS | MDN

如果您关心的只是样式,那么您应该能够通过CSS实现它,但通过屏幕上显示的内容应该是观察它被访问的唯一方式。

我在Greasemonkey的用户脚本中这样做,让那些没有:visited样式的网站显示那些已经访问过的链接。

// ==UserScript==
// @description    ADD a:visited for CSS
// @include        *annalscts.com*
// @include        *thejns.org*
// @include        *turkishneurosurgery.org.tr*
// @include        *nature.com*
// @include        *academic.oup.com*
// @include        *sagepub.com*
// @grant          GM_addStyle
// ==/UserScript==
GM_addStyle('a:visited {color:#EE5665 !important}');

为了将数据收集到本地我使用Greasemonkey API

GM_setValue 
GM_getValue

我刚刚在Youtube上观看了API的教程,并尝试写入用户脚本

Greasemonkey API:值只是在Youtube上搜索此标题。

书面教程:http://nulleffort.com/greasemonkey-api-values/

Greasemonkey文档:https://wiki.greasespot.net/Greasemonkey_Manual:API

我的用户脚本的某些部分

//Firstly, var the ordinary variable preVisitedLinks and assigning to memory variable visitedLinks (At first the value should be undefined)
var preVisitedLinks = GM_getValue("visitedLinks");
unsafeWindow.aclick = function(tlink){
    window.open(tlink, '_blank', 'toolbar=yes,scrollbars=yes,resizable=yes,top=10,left=10,width=10,height=10'); // click a button added and get the link visited in my script 
    //If the ordinary variable preVisitedLinks is undefined (First time running the script)
    if(preVisitedLinks.includes('undefined')){
        GM_setValue('preVisitedLinks', '|' + tlink.replace('http://paper.pubmed.cn/',''));
    }
    //If the ordinary variable preVisitedLinks is not undefined, continue to add each new string collect
    else{
        GM_setValue('preVisitedLinks', preVisitedLinks + '|' + tlink.replace('http://paper.pubmed.cn/',''));
    }
    //The ordinary variable preVisitedLinks assigning to memory variable visitedLinks value. The magic is the variable name the same.
    preVisitedLinks = GM_getValue("preVisitedLinks");
    if(preVisitedLinks.length > 27500){
        preVisitedLinks = preVisitedLinks.substr(preVisitedLinks.length - 27500);
    }
    //The memory variable visitedLinks value assigning to the ordinary variable preVisitedLinks value
    GM_setValue('visitedLinks',preVisitedLinks);
    console.info(preVisitedLinks);
};

在某些地方我使用字符串来检测访问过的链接代码

if(preVisitedLinks.includes(trs[i].querySelectorAll('li')[0].querySelector('a').href.replace('http://xxx.xxxx.com/',''))){
        trs[i].remove();
    }