[Greasemonkey] Basic JavaScript questions
chris feldmann
cfeldmann at gmail.com
Wed Jun 29 17:44:41 EDT 2005
(oops, remove those z's from the logging function!)
On 6/29/05, chris feldmann <cfeldmann at gmail.com> wrote:
>
> I was wrong. it was removing every *other* h3. it would get halfway down,
> the iterator would get halfway up, and they'd bump into each other in the
> middle. This works, though:
>
> (function() {
> var e, i, all;
>
> all = document.evaluate(
> "//h3[@class='title']",
> document,
> null,
> XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
> null);
>
> //all = document.getElementsByTagName("h3");
> var z = all.length;
> for (i = 0; i < all.snapshotLength; i++) {
> e = all.snapshotItem(i);
> GM_log('removing node ' + e.firstChild.nodeValue + ' all.length: ' +
> all.length+' i: ' +i+'z: '+z);
> e.parentNode.removeChild(e);
> }
> })();
>
> Something about using document.getElementsByTagName() makes it unuseful
> for this. XPath on the other hand provides an array that can be cleanly
> iterated through.
>
>
>
>
> On 6/29/05, The Chris Method <thechrisproject at gmail.com> wrote:
> >
> > Here's the whole shebang so far:
> >
> > // ==UserScript==
> > // @name Overheard in NY cleaner
> > // @namespace http://thechrisproject.com
> > // @description example script to alert "Hello world!" on every page
> > // @include http://overheardinnewyork.com/*
> > // @include http://www.overheardinnewyork.com/*
> > // ==/UserScript==
> >
> > (function() {
> > var e, i, all;
> >
> > all = document.getElementsByTagName("h3");
> > for (i = 0; all.length > 0; i++) {
> > e = all[i];
> > GM_log('i:' + i + ' removing node:' + e.firstChild.nodeValue + '
> > all.length:' + all.length);
> > e.parentNode.removeChild(e);
> > }
> > })();
> >
> > On today's overheardinnewyork page, it logs 18 iterations of the loop.
> > The all.length value is one less every iteration, as chris indicated
> > above. The next statement in the console is an error that e has no
> > properties. When looking at the page, there are still quite a few h3 tags
> > showing.
> >
> > On 6/29/05, chris feldmann < cfeldmann at gmail.com> wrote:
> > >
> > > Sorry, accidentally sent. Anyway, I wanted to note that simply cut and
> > > pasted, your script works just fine for me. The log looks like this:
> > >
> > > /inner: removing node [object Text] all.length: 21
> > > /inner: removing node [object Text] all.length: 20
> > > /inner: removing node [object Text] all.length: 19
> > > /inner: removing node [object Text] all.length: 18
> > >
> > >
> > > And all the H3's are gone. Possibly the include parameter is not being
> > > set correctly on install (I seem to have to do it manually as a rule)?
> > >
> > > On 6/29/05, chris feldmann <cfeldmann at gmail.com > wrote:
> > > >
> > > > 1. e.nodeValue
> > > > 2. is it maybe getting shorter because you're removing a node on
> > > > each iteration?
> > > >
> > > > And when you say it's doing nothing, you mean other than logging,
> > > > right? What exactly is getting logged?
> > > >
> > > >
> > > > On 6/29/05, The Chris Method < thechrisproject at gmail.com> wrote:
> > > >
> > > > > I'm trying to write a basic script, one that removes all <h3> tags
> > > > > from a certain webpage (overheardinnewyork.com<http://overheardinnewyork.com>).
> > > > > I have some pretty basic JavaScript<http://en.wikipedia.org/wiki/JavaScript>questions:
> > > > >
> > > > > 1) In debugging my code, I've been trying to figure out a way to
> > > > > access the info inside the tags, i.e. the "text" in <h3>text</h3>.
> > > > > If 'e' is a node representing this element, how do I get the text inside?
> > > > > e.firstChild gives me [object Text] and e.firstChild.value gives
> > > > > me 'undefined'.
> > > > >
> > > > > 2) My first guess on how to actually accomplish the aforementioned
> > > > > task was this:
> > > > >
> > > > > (function() {
> > > > > var e, i, all;
> > > > >
> > > > > all = document.getElementsByTagName("h3");
> > > > > for (i = 0; i < all.length; i += 1) {
> > > > > e = all[i];
> > > > > GM_log('removing node ' + e.firstChild + ' all.length: ' +
> > > > > all.length);
> > > > > e.parentNode.removeChild(e);
> > > > > }
> > > > > })();
> > > > >
> > > > >
> > > > > This does nothing. 'all', which is supposed to be a read-only
> > > > > array (according to my JS ref book), gets one item shorter every time I
> > > > > iterate through the for loop, and i increments. So then I change the
> > > > > condition on the loop from i<all.length to all.length>0. This
> > > > > removes them all. But it seems ugly to me. I guess I'm looking for code
> > > > > critiques and ideas for better ways to do this. Could this all be done with
> > > > > some sort of css fun?
> > > > >
> > > > > If my approach is to just remove the h3 elements entirely, what is
> > > > > the best way?
> > > > > _______________________________________________
> > > > > Greasemonkey mailing list
> > > > > Greasemonkey at mozdev.org
> > > > > http://mozdev.org/mailman/listinfo/greasemonkey
> > > > >
> > > > >
> > > > >
> > > >
> > >
> > > _______________________________________________
> > > Greasemonkey mailing list
> > > Greasemonkey at mozdev.org
> > > http://mozdev.org/mailman/listinfo/greasemonkey
> > >
> > >
> > >
> >
> > _______________________________________________
> > Greasemonkey mailing list
> > Greasemonkey at mozdev.org
> > http://mozdev.org/mailman/listinfo/greasemonkey
> >
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mozdev.org/pipermail/greasemonkey/attachments/20050629/8f8a96d5/attachment.htm
More information about the Greasemonkey
mailing list