2009-07-31 16 views
8

Estoy tratando de seleccionar todos los enlaces visitados a través de jQuery. Aquí está el código HTMLUsar jQuery para seleccionar enlaces visitados

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

Si question-hyperlink se ha visitado, para seleccionar question-summary. ¿Algunas ideas?

Respuesta

8

Aquí es la selección: ejemplo

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

Uso:

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

supongo que se debe mencionar que el enfoque dado se ha desactivado en los navegadores por razones de seguridad. Como es posible recuperar el historial de un visitante mediante la búsqueda de enlaces visitados, se tomaron ciertas medidas para evitarlo.

Fuente: Mozilla Foundation Blog.

A cuadros en Chrome y FF - tanto no son compatibles con $("a:visited") por más tiempo.

2

encontré solución basa en LocalStorage en Nevyan's Blog: Mark visited links using JavaScript and localStorage

Propuso código JavaScript limpio para almacenar enlaces fue presionada por página de usuario en LocalStorage y añadir la clase "visitado" a los padres de un elemento <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'; 
     } 
    } 
} 

No sé si es más seguro que: enfoque visitado sin embargo.

+0

Este tipo de parece una nueva pregunta. Además, querrá colocar el código y la documentación relevante aquí para respaldar su respuesta, no un enlace a la respuesta. Pueden cambiar, afectando la validez de lo que está respondiendo. – rfornal

+1

Gracias por señalar eso :) He corregido mi respuesta. – Maciej

0

ingrese el código aquí`No es compatible con javascript ya que también trato de encontrar métodos para recopilar un: datos de enlaces visitados para ocultar el nodo visitado.

algunos referencia: La privacidad y el: selector visitado - CSS | MDN

Si todo lo que te preocupa es el diseño, deberías ser capaz de lograrlo a través de CSS, pero a través de lo que se muestra en la pantalla debe ser la única forma de observar que se está visitando.

Lo hago de esta manera en un userScript para Greasemonkey para permitir que los sitios sin un estilo: visiten esos enlaces ya visitados.

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

Para recoger los datos a los locales que utilizan la API de Greasemonkey

GM_setValue 
GM_getValue 

I sólo tutoriales vistos en Youtube para la API y tratar de escribir en el userscript

API Greasemonkey: Valores simplemente buscar este título en Youtube

Escrito Tutorial: http://nulleffort.com/greasemonkey-api-values/

Greasemonkey Docs: https://wiki.greasespot.net/Greasemonkey_Manual:API

algunas partes de mi userscript

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

Y en algún lugar yo uso la cadena para detectar la visitados código de enlaces

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