Schleife bricht bei 1 ab?

tomengel

Mitglied
Hola,

ich bin etwas verwundert und kann es mir überhaupt nicht erklären. Ich habe folgende Funktion angefangen zu schreiben:

Code:
function writeImagePre(appElement) {

	var allDivs = document.getElementsByTagName('div');
	var preDivs = new Array();
	var debug = document.getElementById('debug');
	
	debug.innerHTML += 'allDivs Elemente=' + allDivs.length + '<br \/>';
	
	for (var i=0; i<allDivs.length; i++) {
		debug.innerHTML += 'iteration(i)=' + i + '<br \/>';
		//alert(allDivs[i].id + '->style=' + allDivs[i].style.display);
		
		if(allDivs[i].id == 'imagePre'+i) {
		
			debug.innerHTML += 'imagePre' + i + '<br \/>';
			
			preDivs.push(allDivs[i]);
	
			/*if(allDivs[i].style.display != 'none' || allDivs[i].style.display == '') {
				var d = allDivs[i];
				new Effect.Fade(d, { duration: 1.5 , afterFinish: appPre(appElement) });
				document.d.style.display = 'none';
				
				break;
			}*/
		}
		
	}	
	for (var j=0; j<preDivs.length; j++) {
		debug.innerHTML += ' | ' + preDivs[j].id + '->style=' + preDivs[j].style.display;
	}
}

Mit dieser Funktion möchte ich Layer bei klick auf einen Thumb überblenden. Die Layer heißen alle imagePre1, 2, 3 ...

Der erste ist von Anfang an sichtbar und hat display: block; die Anderen display: none.

Nun durchlaufe ich alle Divs und bei Übereinstimmung von imagePre + Iterationsvariable sollen die Divs in ein Array gepackt werden, dass wiederum durchlaufen wird und bei Übereinstimmung eins ausblendet und ein anderes, das per Parameter an eine Func übergeben wird, einblenden. Das Prinzip t, aber ich bekommen immer nur den 1. imagePre div (imagePre1).

die erste For Schleife läuft brav durch aber die if Bedingung wird nur einmal ausgeführt. WARUUUUUM? :mad:

Hier mal die Ausgabe aus dem Debug Container:
allDivs Elemente=31
iteration(i)=0
iteration(i)=1
imagePre1
iteration(i)=2
iteration(i)=3
iteration(i)=4
iteration(i)=5
iteration(i)=6
iteration(i)=7
iteration(i)=8
iteration(i)=9
iteration(i)=10
iteration(i)=11
iteration(i)=12
iteration(i)=13
iteration(i)=14
iteration(i)=15
iteration(i)=16
iteration(i)=17
iteration(i)=18
iteration(i)=19
iteration(i)=20
iteration(i)=21
iteration(i)=22
iteration(i)=23
iteration(i)=24
iteration(i)=25
iteration(i)=26
iteration(i)=27
iteration(i)=28
iteration(i)=29
iteration(i)=30
| imagePre1->style=block

Müsste aber z.B. so aussehen:
allDivs Elemente=31
iteration(i)=0
iteration(i)=1
imagePre1
iteration(i)=2
imagePre2
iteration(i)=3
imagePre3

iteration(i)=4
iteration(i)=5
iteration(i)=6
iteration(i)=7
iteration(i)=8
iteration(i)=9
iteration(i)=10
iteration(i)=11
iteration(i)=12
iteration(i)=13
iteration(i)=14
iteration(i)=15
iteration(i)=16
iteration(i)=17
iteration(i)=18
iteration(i)=19
iteration(i)=20
iteration(i)=21
iteration(i)=22
iteration(i)=23
iteration(i)=24
iteration(i)=25
iteration(i)=26
iteration(i)=27
iteration(i)=28
iteration(i)=29
iteration(i)=30
| imagePre1->style=block | imagePre2->style=none | imagePre3->style=none

Vielleicht ist es auch dieses subtropische Klima - aber ich kann's mir nicht erklären.

Vielleicht hat einer von Euch ja einen Tipp für mich.

Dankööööö und sonnige Grüße,

Tom
 
Moin Tom,

hast du bitte mal das dazugehörige HTML parat, das würde ein Nachstellen der Sache zur Diagnose erleichtern :)
 
Hola,

anbei das HTML:

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="robots"	content="index">
<meta name="robots"	content="follow">
<meta name="language"	content="Deutsch">
<meta name="keywords"	content="Hier die Keywords">
<meta name="description"	content="Hier die Beschreibung">
<meta name="distribution"	content="global">
<meta name="robots"	content="all">
<meta name="revisit-after"	content="10 days">
<title>blubb | &Uuml;bersicht</title>

<script src="../javascript/prototype.js" type="text/javascript"></script>
<script src="../javascript/scriptaculous.js" type="text/javascript"></script>
<script type="text/javascript" language="javascript" src="../javascript/lytebox_v3/lytebox.js"></script>

<link href="../styles/style.css" rel="stylesheet" type="text/css" />
<link href="../styles/style_overview.css" rel="stylesheet" type="text/css" />

</head>

<body style="background-image:none;">
<div id="wrapper_bsp">
	<div id="imagePre1" style="display:block;">
        <div id="image_area"><a href="http://localhost:8888/www.blubb.com/dev/pics/blubb/Ly1_TS_Reservierung.jpg" rel="lytebox[blubb]" title="Tischset"><img src="../pics/blubb/Ly1_TS_Reservierung_pre.jpg" /></a></div>
        <div id="type_area">
            <table width="200px" cellpadding="0" cellspacing="0">
            <tr>
                <td><img src="../pics/blubb/blubb_logo_overview.jpg" width="112" height="38" /></td>
            </tr>
            <tr>
                <td style="vertical-align:bottom; height:316px;"><p><span>Weit hinten,</span><br />
            hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen Sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans. Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien. Es ist ein paradiesmatisches Land, in dem einem gebratene Satzteile in den Mund fliegen. Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht – ein geradezu unorthographisches Leben.
            </p></td>
            </tr>
            </table>
        </div>
    </div>
    <!-- new Set -->
    <div id="imagePre2" style="display:none;">
        <div id="image_area"><a href="http://localhost:8888/www.blubb.com/dev/pics/blubb/1982_Poster_05-222-22.jpg" rel="lytebox[blubb]" title="Poster"><img src="../pics/blubb/1982_Poster_05-222-22_pre.jpg" /></a></div>
        <div id="type_area">
            <table width="200px" cellpadding="0" cellspacing="0">
            <tr>
                <td><img src="../pics/blubb/blubb_logo_overview.jpg" width="112" height="38" /></td>
            </tr>
            <tr>
                <td style="vertical-align:bottom; height:316px;"><p><span>Noch weiter hinten,</span><br />
            hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen Sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans. Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien. Es ist ein paradiesmatisches Land, in dem einem gebratene Satzteile in den Mund fliegen. Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht – ein geradezu unorthographisches Leben.
            </p></td>
            </tr>
            </table>
        </div>
    </div>
    <!-- End new Set -->
    <!-- new Set -->
    <div id="imagePre3" style="display:none;">
        <div id="image_area"><a href="http://localhost:8888/www.blubb.com/dev/pics/blubb/1982_Flyer_B_2-05-222-22.jpg" rel="lytebox[blubb]" title="Poster"><img src="../pics/blubb/1982_Flyer_B_2-05-222-22_pre.jpg" /></a></div>
        <div id="type_area">
            <table width="200px" cellpadding="0" cellspacing="0">
            <tr>
                <td><img src="../pics/blubb/blubb_logo_overview.jpg" width="112" height="38" /></td>
            </tr>
            <tr>
                <td style="vertical-align:bottom; height:316px;"><p><span>Noch weiter hinten,</span><br />
            hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen Sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans. Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien. Es ist ein paradiesmatisches Land, in dem einem gebratene Satzteile in den Mund fliegen. Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht – ein geradezu unorthographisches Leben.
            </p></td>
            </tr>
            </table>
        </div>
    </div>
    <!-- End new Set -->
</div>

<div id="thumb_wrapper">
    <div id="thumbs">
        <div id="thumb"><a href="#" onclick="writeImagePre('imagePre1')"><img src="../pics/blubb/Ly1_TS_Reservierung_thumb.jpg" width="65" height="45" /></a></div>
        <div id="thumb"><a href="#" onclick="writeImagePre('imagePre2')"><img src="../pics/blubb/1982_Poster_05-222-22_thumb.jpg" width="65" height="45" /></a></div>
        <div id="thumb"><a href="#" onclick="writeImagePre('imagePre3')"><img src="../pics/blubb/1982_Flyer_B_2-05-222-22_thumb.jpg" width="65" height="45" /></a></div>
        <div id="thumb"></div>
        <div id="thumb"></div>
        <div id="thumb"></div>
        <div id="thumb"></div>
        <div id="thumb"></div>
        <div id="thumb"></div>
        <div id="thumb"></div>
        <div id="thumb"></div>
        <div id="thumb"></div>
        <div id="thumb"></div>
    </div>
    
    <div id="scroll_leiste">
        <div id="scroll_lefta" onclick="jumpHorizontal($('thumbs'), 'left')" style="width:25px; height:21px; position:absolute;"><img src="../pics/arrow_left.png" width="25" height="21" /></div>
    	<div id="scroll_tracka" style="width:100%; left:18px; position:relative;">
           	<div id="scroll_handlea" style="left:400px; width:136px; height:21px; background-repeat:no-repeat; padding-left:5px; padding-right:0px;"><img src="../pics/scroller.png" width="136" height="21" /></div>
        </div>
        <div id="scroll_righat" onclick="jumpHorizontal($('thumbs'), 'right')" style="width:25px; height:20px; background-position:right; position:absolute; right:0px; bottom:0px;"><img src="../pics/arrow_right.png" width="25" height="21" /></div>
    </div>
</div>

<div id="debug" style="color:#000000; background-color:#999999; width:600px; height:350px; overflow:scroll;">debug</div>



<script language="javascript" type="text/javascript">
// <![CDATA[

// horizontal slider control
var slider5 = new Control.Slider('scroll_handlea', 'scroll_tracka', {
	onSlide: function(v) { scrollHorizontal(v, $('thumbs'), slider5); },
	onChange: function(v) { scrollHorizontal(v, $('thumbs'), slider5); }
});

// scroll the element horizontally based on its width and the slider maximum value
function scrollHorizontal(value, element, slider) {
	element.scrollLeft = Math.round(value/slider.maximum*(element.scrollWidth-element.offsetWidth));
}

function jumpHorizontal(element, direction) {
	
	var blubb = window.innerWidth;
	element.scrollLeft += blubb;
	
	var jump = window.innerWidth / element.scrollWidth;
	
	if(direction == 'right') {
		slider5.setValue(slider5.value + jump);
	} else if(direction == 'left') {
		slider5.setValue(slider5.value - jump);
	}
}


function writeImagePre(appElement) {

	var allDivs = document.getElementsByTagName('div');
	var preDivs = new Array();
	var debug = document.getElementById('debug');
	
	debug.innerHTML += 'allDivs Elemente=' + allDivs.length + '<br \/>';
	
	for (var i=0; i<allDivs.length; i++) {
		debug.innerHTML += 'iteration(i)=' + i + '<br \/>';
		//alert(allDivs[i].id + '->style=' + allDivs[i].style.display);
		
		if(allDivs[i].id == 'imagePre'+i) {
		
			debug.innerHTML += 'imagePre' + i + '<br \/>';
			
			preDivs.push(allDivs[i]);
	
			/*if(allDivs[i].style.display != 'none' || allDivs[i].style.display == '') {
				var d = allDivs[i];
				new Effect.Fade(d, { duration: 1.5 , afterFinish: appPre(appElement) });
				document.d.style.display = 'none';
				
				break;
			}*/
		}
		
	}	
	for (var j=0; j<preDivs.length; j++) {
		debug.innerHTML += ' | ' + preDivs[j].id + '->style=' + preDivs[j].style.display;
	}
}

// ]]>
</script>

<!-- GA Code -->

<!-- GA Code Ende -->
</body>
</html>

Danköööö
 
Sorry, ich war mal kurz weg Brötchen verdienen :-(

Das Problem ist folgendes:
Code:
if(allDivs[i].id == 'imagePre'+i)

i ist ja der Index des aktuellen <div>'s ,welches du in der Schleife am Wickel hast.

Hier mal der Ausschnitt vom Anfang des <body>
Code:
<div id="wrapper_bsp">
	<div id="imagePre1" style="display:block;">
        <div id="image_area">

0->wrapper_bsp
1->imagePre1
2->image_area

Wenn du bei imagePre2 ankommst, ist i nicht 2 (sondern anhand deines HTML 4, weil das 5. <div> im Dokument).

Abhilfe könnte schaffen, wenn du auf die Prüfung von i verzichtest, sondern die ID nur gegen einen regulären Ausdruck testest.

Performanter wäre wohl, wenn du anstatt alle <div>'s zu durchlaufen, nur die childNodes von wrapper_bsp heranziehst...denn das sind ausschliesslich die von dir gesuchten <div>'s(mal von ein paar leeren Textknoten abgesehen).
 
Hola,

ja, Brötchen müssen wir alle verdienen ;)

Jetzt wo Du's sagst fällt es mir wie Schuppen von den Augen :rolleyes:

Muss mal nachdenke, wie man das am Besten Aufbaut, da ich diese Func auf verschiedenen Seiten verwenden will, wo die Anzahl der imagePre variiert.

Ein anderer Weg, der mir grad spontan einfällt, wäre doch eigentlich, wenn ich nur auf die ersten 8 Zeichen (imagePre) prüfe und diese dann in ein neues Array packe. Das kann ich dann, wie angedacht, durchlaufen und überprüfen, oder?

Reguläre Ausdrücke sind für mich, bis dato, etwas unverständlich - egal ob in php, js, actionscript ... hab's bis jetzt noch nicht geschnackelt bekommen.

Aber vielen Dank schon mal für den Hinweis auf meinen Denkfehler!

Sonnige Grüße!
 
Ein anderer Weg, der mir grad spontan einfällt, wäre doch eigentlich, wenn ich nur auf die ersten 8 Zeichen (imagePre) prüfe und diese dann in ein neues Array packe. Das kann ich dann, wie angedacht, durchlaufen und überprüfen, oder?

Jo, das ginge natürlich auch, wenn du sicherstellen kannst, dass sonst nichts eine ID hat, die so beginnt.

Ich weiss jetzt nicht, inwieweit du an <div>'s gebunden bist, aber es gibt ja recht viele HTML-Elemente, falls du eines nicht in deinen Seiten verwendest, könntest du auch dies statt eines <div> nehmen...das ginge zweifellos am Schnellsten und Unproblematischsten. :)
 
Hola,

vom Gefühl her würde ich sagen, dass ich schon an divs gebunden bin, da diese ja als Container für weitere Inhalte stehen.

Aber da ich die Templates erstelle, kann ich sicher sein, dass nirgendwo anders "imagePre" genutzt wird. Daher wird das wohl der gangbarste Weg im Moment sein.

Ich danke Dir noch mal für deine schnelle Hilfe!

Sonnige Grüße,

Tom
 

Neue Beiträge

Zurück