webForumDet fria alternativet
Logga in / Bli medlem

Modifiera Javascript

JavaScript

13 svar · 545 visningar · startad av Ewik

Medlem sedan apr. 200491 inlägg
Frågan#1

Jag har ett javascript som gör nästan som jag vill. Eftersom jag inte kan något om javascript (än) så kanske någon skulle kunna hjälpa?

En testsida finns här.

När man klickat på en rubrik i listan så visas en text till höger, precis som jag vill, men om man klickar en andra gång vill jag att texten till höger försvinner bort igen. Tror inte att det borde vara så mycket jobb.

Sen har jag ett litet problem till. Det verkar inte fungera alls i IE, det vore bra om det gjorde det. :)

Medlem sedan juni 20019 519 inlägg
#2

Du kör med addEventListener för att sätta ett event på elementen, attachEvent heter det för IE, om jag kan komma med förslag så hade jag försökt mig på JQuery istället (eller annat ramverk) det hade blivit så mycket enklare ;)

Men din js kod kan vara:

var sectionCollapse = function(){
    // start configuration - edit here 
    var config = {
        JSavailableClass:'js',
        showClass:'show',
        tocID:'toc'
    }
    // end configuration
    document.body.className = (document.body.className +' '||'') + config.JSavailableClass;
    var toc = document.getElementById(config.tocID);
    if(toc){
        var current = {};
        function toggle(e){
            var t = e.target;
            if(t.nodeName.toLowerCase() === 'a'){
                var sectionID = t.getAttribute('href').split('#')[1];
                var section = document.getElementById(sectionID);
                if(current.section){
                    current.section.className = '';
                }
                if(section){
                    section.parentNode.className = (current.section==section.parentNode?'':config.showClass);
                    current.section = section.parentNode;
                };
            };
        };
        toc.addEventListener('click',toggle,false);
    };
}();
Medlem sedan apr. 200491 inlägg
#3

Ok, jag har kollat lite, även tidigare, på jQuery och tror jag kan vara något på spåren där. Jag ska experimentera vidare lite grann. Återkommer.

Medlem sedan apr. 200491 inlägg
#4

Nu har jag kollat lite på jQuery och insett att jag kan alldeles för lite Javascript. Har hittat ett exempel på hur man kan göra visa/dölj. Men grejen är att jag gärna vill ha kvar HTML som den är nu. Alltså den HTML som är på testsidan.

Medlem sedan juni 20019 519 inlägg
#5

Måste säga det bli fruktansvärt jobbigt eftersom det är jätte svårt att få ut divarna att döljas, hade varit betydligt enklare om det hade varit en wrapper runt dom, men:

    <script type="text/javascript">
		$(function(){
			$("div").hide();
			$("body").addClass("js");
			$("#toc a").click(function(e){
				var t = $(this).attr("href");
				$(t).parent().parent().find("div").hide();
                if($(t).parent().hasClass("show"))
                {
                    $(t).parent().removeClass('show');
                    $(t).parent().hide();
                }
                else
                {
                    $(t).parent().addClass('show');
                    $(t).parent().show();
                }
		    });
        });
    </script>

fungerade med HTML koden du har gett. men CSS delen så har inte body klassen JS vilket ställer till "problem" kanske.

red. la in JS för att lägga in JS cssklassen till body-elementet

Medlem sedan nov. 20051 317 inlägg
#6

Flikar in med en sak... Vad betyder det när raderna inleds med ett $-tecken?

Medlem sedan juni 20019 519 inlägg
#7

$(function() {}); är samma sak som (JQuery här):

 $(document).ready(function(){
   // Your code here
 });

dvs dom.ready

kortade ner koden lite (gå säkert ännu mer):

$(function(){
	$("div").hide();
	$("body").addClass("js");
	$("#toc a").click(function(){
	    var that = this;
	    $("#toc a").each(function()
	    {
	        var id = $(this).attr("href");
	        if(this == that) { $(id).parent().toggle().addClass('show'); }
	        else { $(id).parent().hide().removeClass('show');}
	    });
    });
});

... men orkar inte mer ;)

Medlem sedan apr. 200491 inlägg
#8

Tack så mycket för hjälpen voigtann1. Nu verkar det fungera riktigt bra!

Medlem sedan juni 20019 519 inlägg
#9

Vill bara varna dig: du får aldrig har några andra div:ar i din kod, dom kommer alltid att bli dolda.

Medlem sedan apr. 200491 inlägg
#10

OK, men om man lägger in en wrapper runt div:arna

<ul id="toc">
  <li><a href="#rubrik1">Rubrik 1</a></li>
  <li><a href="#rubrik2">Rubrik 2</a></li>
  <li><a href="#rubrik3">Rubrik 3</a></li>
</ul>
<div id="wrap">
  <div>
    <h2 id="rubrik1">Rubrik 1</h2>
    <p>Lorem ipsum...</p>
  </div>
  <div>
    <h2 id="rubrik2">Rubrik 2</h2>
    <p>Lorem ipsum...</p>
  </div>
  <div>
    <h2 id="rubrik3">rubrik 3</h2>
    <p>Lorem ipsum...</p>
  </div>
</div>
Medlem sedan juni 20019 519 inlägg
#11

$("div").hide(); => $("#wrap div").hide();

Medlem sedan apr. 200491 inlägg
#12

Så tyckte jag också att det skulle vara men efter att ha ändrat det får jag inte fram nånting. Dom dolda divarna visas inte.

Se här

Medlem sedan juni 20019 519 inlägg
#13

Det är din CSS som är problemet. fixa din CSS.

Medlem sedan apr. 200491 inlägg
#14

Oj, jag missade det. Tack för all hjälp..

260 ms totalt · 4 externa anrop · v20260731065814-full.5386d3bf
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)