[JS/GreaseMonkey]

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met het ontwikkelen van een klein GreaseMonkey-scriptje, helaas is mijn ervaring met javascript vrij beperkt en de verwarring wordt alleen maar groter bij het googelen...

Het script zou automatisch een stuk tekst moeten zoeken binnen bepaalde tags in de source van een htmlpagina. Ik heb de inhoud van de pagina doormiddel van volgende code gestored:

var source=document.body.innerHTML;

Nu wil ik door het document loopen op zoek naar alle strings tussen <span class="hide vcard"><span class="url"> en </span> . De waarde tussen deze 2 zoekwaarden moeten opgeslagen worden in een array en daarna moet er random een waarde uit die array gekozen worden.

Enig idee hoe ik dit kan bereiken? Mijn gok gaat uit naar Reguliere Expressies, maar ook op dit vlak ben ik eerder een beginner...

Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 15:24

Johnny

ondergewaardeerde internetguru

Je zit nu een beetje op een dwaalspoor. Met javascript kun je veel makkelijker met een DOM (boomstructuur van elementen) werken dan met een string zoals jij nu doet.

Hoewel je javascripervaring misschien beperkt is, is het waarschijnlijk toch het makkelijkst om dit te doen met een library zoals jQuery, die voor zover ik weet ook met GreaseMonkey.

Het voordeel daarvan is namelijk dat je met behulp van selectors in één regel code precies de juiste selectie van elementen kunt maken:

JavaScript:
1
2
3
4
5
6
7
8
9
10
//vind alle vcards
var $vcards = $('span.vcard');

//voer een functie uit op iedere vCard
$vcards.each( function(i) {
    //vind alle url's in deze vCard
    var $url = $(this).find('span.url');
}

);

Let op: deze code doe ik even uit m'n hoofd zonder hem te hebben gecontroleerd.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Johnny schreef op zondag 17 januari 2010 @ 12:44:
JavaScript:
1
2
3
4
5
6
7
8
9
10
//vind alle vcards
var $vcards = $('span.vcard');

//voer een functie uit op iedere vCard
$vcards.each( function(i) {
    //vind alle url's in deze vCard
    var $url = $(this).find('span.url');
}

);
Ik neem aan dat het dan zoiets moet worden:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Add jQuery
    var GM_JQ = document.createElement('script');
    GM_JQ.src = 'http://jquery.com/src/jquery-latest.js';
    GM_JQ.type = 'text/javascript';
    document.getElementsByTagName('head')[0].appendChild(GM_JQ);

// Check if jQuery's loaded
    function GM_wait() {
        if(typeof unsafeWindow.jQuery == 'undefined') { window.setTimeout(GM_wait,100); }
    else { $ = unsafeWindow.jQuery; letsJQuery(); }
    }
    GM_wait();

// All your GM code must be inside this function
    function letsJQuery() {
        alert($); // check if the dollar (jquery) function works
        //vind alle vcards
        var $vcards = $('span.vcard');
        
        //voer een functie uit op iedere vCard
        $vcards.each( function(i) {
            //vind alle url's in deze vCard
            var $url = $(this).find('span.url');
        }
        );
    }
    
LetsJQuery();


Hoe kies ik dan een random value uit deze array?
Deze waarde moet namelijk nog verder worden gebruikt in een andere functie.

Btw: als ik het script uitvoer met alert($url) krijg ik een aantal keer [object Object] terug, als ik uitvoer met alert($url[1]) een aantal keer [object XPCNativeWrapper [object HTMLSpanElement]] . Dit is toch niet het soort tekst dat we zoeken?

Acties:
  • 0 Henk 'm!

  • pieturp
  • Registratie: April 2004
  • Laatst online: 27-08 14:18

pieturp

gaffa!

Verdiep je even ietsjes meer in jQuery. Als je iets select krijg je een jQuery object terug, zodat je die weer in andere jQuery methods kan stoppen, en die weer... etc. Wat jij zoekt is .text(); Deze maakt er een string van.
Voor arrays raadt ik je aan even een kijkje te nemen op https://developer.mozilla...ence/Global_Objects/Array
Random kom je wel uit toch?

... en etcetera en zo