[JS] Newlines in een textnode in MSIE

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Ik heb in de html ergens een tag met wat platte tekst erin en die heb ik in een script nodig. In dat script heb ik ook de newlines uit die tekst nodig.

HTML:
1
2
3
4
5
<div id="blaat" style="white-space:pre">
regel 1
regel 2
regel 3
</div>


Een een stukje script. Ik heb 5 manieren geprobeerd:
JavaScript:
1
2
3
4
5
alert($("#blaat").text());  // $ == jQuery 1.4.2
alert($("#blaat").html());
alert(document.getElementById("blaat").innerText);
alert(document.getElementById("blaat").innerHTML);
alert(document.getElementById("blaat").firstChild.nodeValue);


Allevijf van deze manieren geven de text in #blaat keurig terug, alleen iedere newline is een spatie geworden, en dat is niet wenselijk. Ik moet op de eoa manier kunnen splitten op newlines, en ik kan niet de inhoud van #blaat wijzigen.

In Firefox werkt dit wel zoals verwacht, maar in MSIE (8 in mijn geval) dus niet..
Rara, wat nu? :)

日本!🎌


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Even een eerste gok: Een alert toont (in IE) geen newlines maybe? Al eens geprobeerd deze values ergens anders in te mikken dan een alert?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Een alert in IE toont wel degelijk newlines. De waarde in de console gooien, of in een andere node met white-space:pre geeft hetzelfde (ongewenste) effect. En ook als ik met .charCodeAt() ga spelen, kom ik geen 13 of 10 tegen, alleen 32 (spatie) op de plek waar de newline stond.

日本!🎌


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Haal die white-space:pre eens weg?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Die had ik er juist neergezet omdt het zonder ook niet werkt :)

日本!🎌


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28
Ik kan je probleem niet reproduceren. Ik krijg gewoon de enters.

Sla je het niet toevallig in een raar formaat op, of wordt je html "geoptimaliseerd" ofzo?

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

_Thanatos_ schreef op vrijdag 30 juli 2010 @ 12:42:
Die had ik er juist neergezet omdt het zonder ook niet werkt :)
Doe eens een volledige testcase neerzetten, want dat was bij mij juist in de oplossing in alle IE versies :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • Klaasvaak
  • Registratie: Maart 2010
  • Laatst online: 12-09 21:10
Het lijkt erop dat je IE moet wachten tot de pagina volledig geladen is.

HTML:
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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>
<body onload="init()">
<div id="inPut" style="white-space:pre">regel 1
regel 2
regel 3
</div>
<hr>
<div id="outPut"></div>

<script>
var el = document.getElementById('inPut');
var s = [];
var txtNode = el.firstChild;

s.push(/\r/g.test(txtNode.nodeValue), txtNode.nodeValue.search(String.fromCharCode(13)), el.childNodes.length); // MSIE: [false, -1, 1], FF, Opera: [true, 7, 3]

function init(){
 s.push(/\r/g.test(txtNode.nodeValue), txtNode.nodeValue.search(String.fromCharCode(13)), el.childNodes.length); // true, 7, 3
 outPut.innerHTML += s.join('<br>');
};
</script>
</body>
</html>


Het viel me ook op dat als je voor regel 1 een enter geeft, IE deze wel eens weg laat als je met F5 refreshed.
Pagina: 1