Используйте jQuery для выбора посещенных ссылок - PullRequest
9 голосов
/ 31 июля 2009

Я пытаюсь выбрать все посещенные ссылки через jQuery. Вот HTML

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

Если посещено question-hyperlink, я должен был выбрать question-summary. Есть идеи?

Ответы [ 4 ]

35 голосов
/ 29 апреля 2014

Полагаю, стоит упомянуть, что данный подход был отключен в браузерах по соображениям безопасности. Поскольку можно получить историю посещений, проверив посещенные ссылки, были предприняты определенные меры для предотвращения этого.

Источник: Блог Mozilla Foundation.

Проверено в Chrome и FF - оба больше не поддерживают $("a:visited").

7 голосов
/ 24 ноября 2009

Вот выбор:

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

Пример использования:

$("a:visited").parent(".question-summary").addClass("is_visited");
3 голосов
/ 16 февраля 2015

Я нашел обходной путь на основе LocalStorage на Блог Невьяна: Пометить посещенные ссылки с помощью JavaScript и localStorage

Он предложил чистый код JavaScript для хранения ссылок, по которым щелкнул пользователь страницы в LocalStorage, и добавил класс «посещенных» к родительскому элементу <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';
        }
    }
}

Я не знаю, безопаснее ли это: посещенный подход.

0 голосов
/ 13 марта 2017

введите код здесь. Javascript не поддерживается, так как я также пытаюсь найти методы для сбора данных: посещенных ссылок, чтобы скрыть посещенный узел.

некоторые ссылки: Конфиденциальность и посещаемость: CSS | MDN

Если все, что вас волнует, это стилизация, вы сможете добиться этого с помощью CSS, но то, что отображается на экране, должно быть единственным способом наблюдения за его посещением.

Я делаю это в пользовательском сценарии для Greasemonkey, чтобы эти сайты без стиля: посещения отображали уже посещенные ссылки.

// ==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 и попытался написать в usercript

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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...