Toon posts:

Tekst uit DIV zonder ID (IE & Netscape)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een code bedacht om via een popup uit de opener de tekst uit een DIV te vissen, zonder dat ik de ID van de DIV ken. Dit werkt alleen (nog) voor IE.
Ik krijg het niet voor elkaar voor Netscape via document.layers.
Iemand een idee ?


code:
1
2
3
4
5
6
7
8
9
<script language="javascript">
var string="";

function quotecolumn()
{
divColl = parent.opener.document.all.tags("DIV");
string=divColl(74).innerText;
}
</script>

  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

Gebruik ipv document.all document.getElementByTagName('div').

Verwijderd

netscape? welke "netscape"?

innerText = IE only

tijd om je te verdiepen in een echte DOM oplossing.

  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

En dan nog, hoe weet je dat het de 74'ste div is uit je array? Dan gebruik ik toch liever een ID.

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

mag ik vragen wat het nut hiervan is dan?

je kan toch net zo goed bij de DIV onclick="functienaam(this);" doen?

Blog [Stackoverflow] [LinkedIn]


Verwijderd

Topicstarter
Gaat er inderdaad om het stukje innerText te vervangen door een alternatief dat ook voor andere browsers toegepast kan worden.

Probleem is dat ik de broncode niet kan wijzigen van de hoofdpagina. Werkt met modules in PHP.
Dat is ook de reden dat ik geen ID kan toevoegen en ook geen andere codes kan plaatsen in de hoofdpagina. Ik leidt dus alles om.

Bedoeling is om uit een stukje tekst in een DIV een getal te filteren, waarna via een replace in de popup de pagina wordt gewijzigd in een pagina die voldoet aan de filtervoorwaarden. (Moet dus toch al een popup hebben)

Aan de weet komen om welke DIV het gaat is niet zo moeilijk. Kan netjes alle innerTextsten uitlezen met het bijbehorende nummer van de DIV.

Alles werkt voor IE inclusief de filtering.

Voorbeeld met dummy hoofdpagina kun je

HIER vinden.

Rechts bovenin op de hoofdpagina staat een quote. Deze worden uitsluitend als tekst geproduceerd. Daaronder de link om de volledige column te bekijken.
Daar gaat het om.

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

is de titel van die quote altijd hetzelfde?
of tenminste herkenbaar, want dan zou je gewoon de hele tree met DIV's kunnen doorlopen en kunnen zoeken naar een div met "quote" erin.
daarna met nextSibling de volgende selecteren en de data daaruit halen :)

Blog [Stackoverflow] [LinkedIn]


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

document.layers is enkel NS4, voor alle moderne browsers ("versie 5+" browsers) zou dit gewoon moeten werken als de div enkel plain text bevat:

JavaScript:
1
var string = parent.opener.document.getElementsByTagName('DIV').item(74).firstChild.nodeValue;

Intentionally left blank


Verwijderd

Topicstarter
Dank aan de mensen die me op het goede spoor hebben gezet !

Dit is de oplossing die ik heb gevonden :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function quotecolumn()
{

if (IE4)
{
divColl = parent.opener.document.all.tags("DIV");
string=divColl(74).innerText;
}
else
{
range = document.createRange();
range.selectNode(parent.opener.document.getElementsByTagName("div").item(74));
 string = range.toString();
}
.
.
.

Verwijderd

IE4 is ook dood.

Verwijderd

Topicstarter
Laten we het er dan maar op houden dat een scriptje bijhoudt dat het minimaal IE4 betreft :)

  • Bigs
  • Registratie: Mei 2000
  • Niet online
document.all en document.layers is 1e generatie DHTML (level 0 DOM, uit de tijd van IE4 en NS4) en moet je eigenlijk niet meer gebruiken. De oplossing van andré en crisp is de juiste: Level 1 DOM gebruiken, zoals dus getElementsByTagname. Dan werkt je site ook meteen in alle moderne browsers.

Deze site bevat goede uitleg:
http://www.quirksmode.org/?dom/intro.html

  • Justice
  • Registratie: Maart 2001
  • Laatst online: 07-08-2025
offtopic:
Gaat ditover het vervangen van andermans popup advertenties door eigen inhoud oid?

Human Bobby


Verwijderd

Topicstarter
Justice schreef op 05 februari 2004 @ 13:19:
offtopic:
Gaat ditover het vervangen van andermans popup advertenties door eigen inhoud oid?
Als je even kijkt op de linkpagina dan zie je dat het daar allemaal niks mee te maken heeft. Bovendien zou dat niet zomaar gaan, want de files moeten in dezelfde map van dezelfde server staan !

Verwijderd

Topicstarter
Bigs schreef op 05 februari 2004 @ 13:10:
document.all en document.layers is 1e generatie DHTML (level 0 DOM, uit de tijd van IE4 en NS4) en moet je eigenlijk niet meer gebruiken. De oplossing van andré en crisp is de juiste: Level 1 DOM gebruiken, zoals dus getElementsByTagname. Dan werkt je site ook meteen in alle moderne browsers.
Dan is het toch vreemd dat het gedeelte onder "else" niet werkt op de IE ?
Want dat had ik wel verwacht.

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op 05 februari 2004 @ 13:28:
[...]


Dan is het toch vreemd dat het gedeelte onder "else" niet werkt op de IE ?
Want dat had ik wel verwacht.
Nee, IE heeft een afwijkende implementatie van de createRange() method, namelijk via een selection object. Ik snap eigenlijk niet waarom je deze manier gebruikt om de inhoud van een node uit te lezen, ranges zijn alleen interessant als het om gedeeltes gaat; ik zou toch voor nodeValue gaan, dat werkt ook in IE5+

[ Voor 3% gewijzigd door crisp op 05-02-2004 13:40 ]

Intentionally left blank


Verwijderd

Topicstarter
Wanneer ik de code van Crisp gebruik blijkt de value steeds "null" te zijn.
Ergens zit het dan nog niet goed of mis ik iets ?

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

HTML:
1
2
3
4
5
6
<div>foo</div>
<div>bar</div>
<script type="text/javascript">
alert(document.getElementsByTagName('DIV').item(0).firstChild.nodeValue); // foo
alert(document.getElementsByTagName('DIV').item(1).firstChild.nodeValue); // bar
</script>


werkt prima hoor...

Intentionally left blank


Verwijderd

Topicstarter
Kan het niet zijn dat de code niet werkt omdat de DIV met de tekst zit in de opener en de uitlezing in de popup ?

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op 05 februari 2004 @ 18:56:
Kan het niet zijn dat de code niet werkt omdat de DIV met de tekst zit in de opener en de uitlezing in de popup ?
nee, dat zou niet uit moeten maken.

Intentionally left blank


Verwijderd

Topicstarter
Bedankt crisp, je had gelijk.
Dat er meldingen van "null" kwamen had er mee te maken dat de tekst binnen de DIV niet helemaal plaintext was. Er zit een <i> in en een <br>.
Blijkbaar gaat dan het verhaal niet op met jouw methode. Na het weghalen in de dummy werkt het wel op jouw manier.
De manier die ik gebruik heeft er waarschijnlijk geen problemen mee dat er tags in de div zitten.

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op 05 februari 2004 @ 19:51:
Bedankt crisp, je had gelijk.
Dat er meldingen van "null" kwamen had er mee te maken dat de tekst binnen de DIV niet helemaal plaintext was. Er zit een <i> in en een <br>.
Blijkbaar gaat dan het verhaal niet op met jouw methode. Na het weghalen in de dummy werkt het wel op jouw manier.
De manier die ik gebruik heeft er waarschijnlijk geen problemen mee dat er tags in de div zitten.

Dan zou ik innerHTML gebruiken die wel door alle gangbare browsers ondersteund wordt (ook al is het geen onderdeel van de DOM), of cloneNode()

Intentionally left blank

Pagina: 1