|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
[Javascript][Greasemonkey]Scroll ad elemento successivo tramite classe
Ok, non so se vale scrivere qua se si hanno dubbi con JS per greasemonkey, nel caso, qualche mod sposti nella sezione corretta.
Premetto che non conosco jQuery e conosco poco JS ( conosco, perchè ho fatto C, Java e altri linguaggi che hanno sintassi simile ). Detto ciò, Sto cercando di farmi uno script dove premendo un tasto ( della tastiera, nel mio caso J ) mi porti al successivo elemento della pagina che viene identificato secondo un ID. Ora siccome i div tra cui mi voglio spostare sono univocamente identificati tramite una classe, e ho visto che farlo con JS puro è piuttosto complesso ( vista l'assenza di un getElementByClass ), ho deciso di usare anche jQuery. Con jQuery, vista la poca dimestichezza, ho optato per identificare tutti i div con una certa classe, per poi aggiugere ad ognuno di loro un id univoco ( una stringa + un numero sequenziale ). In seguito speravo, tramite il plugin di jQuery scrollTo, di passare da un elemento all'altro facilmente: Codice:
// ==UserScript==
// @name ScrollPrevNext
// @namespace ScrollPrevNext
// @include miosito.php
// @require https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.3.1-min.js
// @version 1
// ==/UserScript==
$(document).ready(function() {
nElem= $('.cl1').length;
var i = 0;
var j = 0;
var name=null;
$('div.cl1').attr('id', function(i){
i++;
return 'Pers '+i;
});
$('body').keydown(function(e) {
if(e.keyCode == 74 )
if ( j < nElem ) //Go fwd
{
j++;
name = '#Pers ' + j;
$('body').scrollTo(name);
}
if(e.keyCode == 75 ) //Go bwd
if( j > 0 )
{
j--;
$('body').scrollTo('#Pers ' +j);
}
});
});
Riesco ad aggiungere il nuovo ID ad ogni elemento, ma non c'è modo di passare da uno all'altro. È come se non riconoscesse la funzione scrollTo . Ammetto che non ho idea se un plugin di jQuery si richiami così oppure no, fatto sta che dal punto di vista sintattico è tutto perfetto. Ho controllato e dentro gli if ci arriva, ma il comando non viene eseguito. Chiudo dicendo che ho testato questo script anche in una pagina di prova html da me creata, aggiungendo opportunamente le librerie jquery ( quindi usando <script src".."></script> invece di @require ) e non funziona nemmeno li... Cosa mi sfugge?
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Ok, lo script è perfetto, l'unico problema stava che nel creare i nuovi ID ho usato uno spazio tra Pers e il numero, di conseguenza questo creava un errore con scrollTo.
( A pensarci bene, visto che credo sta notazione sia ripresa da CSS, in CSS una scrittura così, un ID 'spaziato' non ha minimamente senso...
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Per non aprire un altro topic: come faccio ad aprire un link in una nuova scheda in secondo piano?
Ho solo trovato come aprire una scheda in primo piano...
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Dopo una breve ricerca nella sezione "Search Scripts" del sito di Greasemonkey usando la funzione "Custom script search with Google" ho trovato questo:
http://userscripts.org/topics/61576 Posto anche questo link: https://duckduckgo.com/?q=Greasemonk...background+tab
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 18-01-2013 alle 09:38. |
|
|
|
|
|
#5 | ||
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
È una risposta che ho trovato anche io in giro, tuttavia penso che si possa fare, con qualche...trucco. Ad esempio, non sono un drago di JS ne jQuery, ma vedendo le funzioni presenti in jQuery sono convinto si possa fare quello che ora dirò a breve. Qualcuno con un po' di dimestichezza saprebbe come fare per:
La seconda opzione sarebbe,a mio avviso, la più fine in termini di raggiungimento dell'obiettivo. La prima è un po' da "Il fine giustifica i mezzi". Quote:
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
||
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Ho dato un occhiata in giro, e ho scoperto un add-on che potrebbe fare al caso tuo: Scriptish.
link add-on per Firefox homepage di Scriptish Pare sia una sorta di fork/estensione di Greasemonkey. Quel che ti può interessare è che nella lista delle modifiche introdotte con la versione 0.1.2 [version history] ho trovato questo: Quote:
Andando a spulciare la "documentazione" circa la chiamata a GM_openInTab di Greasemonkey migliorata da Scriptish salta fuori questo: https://github.com/scriptish/scripti...i/GM_openInTab
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 18-01-2013 alle 12:58. |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
Ne avevo sentito parlare di scriptish, ma pensavo fosse solo un esercizio di stile per quale programmatore poco grato allo sviluppatore di greasemonkey. Controllo appena ho un attimo di tempo!
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Ottimo! Ho provato e sono riuscito nel mio intento.
Ora però sto provando un po' le funzioni jquery $.get() e $.ajax(). Ho serie difficoltà a capirne il funzionamento. Quello che voglio fare io è: dato un link ( nello stesso dominio da cui faccio partire la richiesta ) voglio che mi ritorni l'elemento con una determinata ( e ciò che contiene ). Ho provato molte cose, tipo: Codice:
$.get('http://esempio.it/pagina1.php', function(data){
alert($(data).find('.classe1'));
});
Codice:
$.get('http://esempio.it/pagina1.php', function(html){
var $result=$(html);
alert($($result).find('.classe1'));
});
Codice:
$.get('http://esempio.it/pagina1.php', function(html){
var $result=html;
alert($($result).find('.classe1'));
});
Nessuno di questi funziona. L'unica cosa che funziona ( che non mi serve a niente però ): Codice:
$.get('http://esempio.it/pagina1.php', function(html){
alert(html);
});
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Codice:
$.get('http://esempio.it/pagina1.php', function(html){
var $result=$(html);
alert($result.find('.classe1').html());
});
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
Non succede nulla e dalla console degli errori mi dice: Codice:
Error: Syntax Error, unrecognised expression: html di esempio.it/pagina.php
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:10.




















