pistopoiiisi sta iek erotisis

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

pistopoiiisi sta iek erotisis

Δημοσίευση από skeftomilos » 20 Ιαν 2006 07:53

Ένα quiz από μένα ως αποζημίωση για την άσκηση που έλυσα. :) Όποιος θέλει (και μπορεί) ας το λύσει.

Πώς μπορούν να αντικατασταθούν όλα τα στοιχεία <b> μίας σελίδας με στοιχεία <em>, χωρίς να γίνει χρήση της innerHTML;
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

pistopoiiisi sta iek erotisis

Δημοσίευση από cherouvim » 20 Ιαν 2006 08:40

Κώδικας: Επιλογή όλων

window.onload=init;

function init&#40;&#41; &#123;
	if&#40;document.getElementById && document.createTextNode&#41; &#123;
		var bs = document.getElementsByTagName&#40;"b"&#41;;
		for&#40;var i=0, lengthi=bs.length; i<lengthi; i++&#41; &#123;
			var em = document.createElement&#40;"em"&#41;;
			for&#40;var j=0, lengthj=bs&#91;i&#93;.childNodes.length; j<lengthj; j++&#41; &#123;
				em.appendChild&#40;bs&#91;i&#93;.childNodes&#91;0&#93;&#41;;
			&#125;
			bs&#91;i&#93;.parentNode.insertBefore&#40;em, bs&#91;i&#93;&#41;;
		&#125;
	&#125;
&#125;

To mono mionektima einai oti den afairei ta adia pleon <b></b> tags.

I idia doulia tha ginotane pio grigora me regular expressions nomizo. Alla ekana ti lysi me to DOM.

Live demo @ http://temp.cherouvim.com/forums/btoem

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

pistopoiiisi sta iek erotisis

Δημοσίευση από skeftomilos » 20 Ιαν 2006 09:13

Αααα! Εσύ είναι καλόοος! :D

Κι αν σου έλεγα να βγάλεις και τα άδεια <b> πώς θα τα έβγαζες;
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

pistopoiiisi sta iek erotisis

Δημοσίευση από cherouvim » 20 Ιαν 2006 09:27

Etroga kati exceptions me to removeChild kai de to epsaksa poly logo doulias.

Κώδικας: Επιλογή όλων

    parentNode
        |
        |
   ------------
  |           |
  |           |
 <em>        <b>
Genika hrisimopoihsa tin insertBefore opote to <em> mpainei paidi tou parentNode prin to <b> to opoio adiazei apo childNodes.

Enas allos tropos (non efficient omos) tha itane na ksanakano browse to DOM gia <b> elements kai na ta sviso.

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

pistopoiiisi sta iek erotisis

Δημοσίευση από skeftomilos » 21 Ιαν 2006 10:55

Υπάρχει κάποιο catch σχετικά με τις διαγραφές στοιχείων του DOM. Αν το βρείτε θα καταλάβετε κάτι σημαντικό για τη φύση των DOM συλλογών. Δεν το μαρτυράω, όποιος το βρει ας το πει. :P
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

pistopoiiisi sta iek erotisis

Δημοσίευση από cherouvim » 21 Ιαν 2006 11:20

Κώδικας: Επιλογή όλων

public Node removeChild&#40;Node oldChild&#41;
                 throws DOMException

    Removes the child node indicated by oldChild from the list of children, and returns it.

    Parameters&#58;
        oldChild - The node being removed. 
    Returns&#58;
        The node removed. 
    Throws&#58;
        DOMException - NO_MODIFICATION_ALLOWED_ERR&#58; Raised if this node is readonly.
        NOT_FOUND_ERR&#58; Raised if oldChild is not a child of this node.

Gia pes mas. Pethaino apo agonia! :)

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

pistopoiiisi sta iek erotisis

Δημοσίευση από skeftomilos » 21 Ιαν 2006 12:00

Αυτό δεν τρέχει, γιατί άραγε;

Κώδικας: Επιλογή όλων

window.onload=init

function init&#40;&#41; &#123;
  var bs = document.getElementsByTagName&#40;"b"&#41;
  for &#40;var i = 0, lengthi = bs.length; i < lengthi; i++&#41; &#123;
    bs&#91;i&#93;.parentNode.removeChild&#40;bs&#91;i&#93;&#41;
  &#125;
&#125;
Ο καλός ο JavaScripter πρέπει να τα καταφέρνει και στο debugging! :)
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

pistopoiiisi sta iek erotisis

Δημοσίευση από skeftomilos » 23 Ιαν 2006 14:14

Ας το πάρει το ποτάμι. :)

Οι συλλογές του DOM είναι δυναμικές. Αυτό σημαίνει ότι αναπαριστούν ανά πάσα στιγμή την τρέχουσα κατάσταση του DOM, όχι κάποιο στιγμιότυπο του παρελθόντος. Όταν λοιπόν αφαιρούμε ένα στοιχείο από το DOM, αυτόματα αφαιρείται από την αντίστοιχη συλλογή. Το length της συλλογής μειώνεται κατά ένα. Το index των στοιχείων της συλλογής που ήταν μετά από αυτό που αφαιρέθηκε, μειώνεται επίσης κατά ένα. Δηλαδή το στοιχείο στη θέση 5 τώρα βρίσκεται στη θέση 4. Ο κώδικας στο προηγούμενο post δε λαμβάνει υπόψη τη δυναμική φύση της συλλογής, με αποτέλεσμα σε κάποιο loop η bs να επιστρέφει null, το οποίο δεν έχει ιδιότητες, κατά συνέπεια βγαίνει σφάλμα. Ο σωστός τρόπος λοιπόν είναι:

Κώδικας: Επιλογή όλων

window.onload=init

function init&#40;&#41; &#123;
  var bs = document.getElementsByTagName&#40;"b"&#41;
  for &#40;var i = 0, lengthi = bs.length; i < lengthi; i++&#41; &#123;
    bs&#91;0&#93;.parentNode.removeChild&#40;bs&#91;0&#93;&#41;
  &#125;
&#125;
Ή μήπως όχι; :)
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες