Avatar billede alex15 Nybegynder
31. januar 2010 - 19:23 Der er 13 kommentarer og
1 løsning

Hvordan anvendes 'geElementById' med class i stedet for?

Hej allesammen,

Jeg anvender følgende kode til at skjule eller vise bokse på min side:

---

<script type="text/javascript">
    var hidden = 0 /* Normaltilstand: elementet er skjult */
      function toggleDisplay(objekt) {
      if (hidden ==0){
          for (i=1;i<2;i++){
            document.getElementById(objekt+i).style.display="block";
          }
          hidden=1;
          return;
      }
      else {
      for (i=1;i<2;i++){
        document.getElementById(objekt+i).style.display="none"; 
      }
      hidden=0;
      }
    }
</script>

---

Problemet er bare at ovenstående kode, kun kan bruges med ID, det vil altså sige at jeg ikke kan bruge class bokse? Så bliver nød til at lave en boks for hver kan jeg ønsker at anvende koden?

Nogle der ved hvad jeg kan gøre for at anvende Class i stedet for?

Eller kender til andre koder, som jeg det samme?

Håber at i forstår mit spørgsmål.

Alex
Avatar billede erikjacobsen Ekspert
31. januar 2010 - 19:36 #1
Avatar billede alex15 Nybegynder
31. januar 2010 - 23:04 #2
Tak, tager lige og kigger lidt på det, og ser om jeg kan få det til at fungere.
Avatar billede lolman Nybegynder
02. februar 2010 - 18:35 #3
--- jscript
var allHTMLTags = new Array();
function getElementByClass(theClass) {
  var returnArray = new Array(); var b = 0;
  var allHTMLTags=document.getElementsByTagName("*");
  for (i=0; i<allHTMLTags.length; i++) {
    if (allHTMLTags[i].className==theClass) {
      returnArray[b] = allHTMLTags[i];
      b++;
    }
  }
  return returnArray;
}

---

Med denne funktion returnes alle elementer med den galdende klasse i en array. som kan bruges med:
--- jscript
elements = getElementByClass("boks");
boks1 = elements[0];
boks2 = elements[1];
--- html
<div class="boks">bliver boks1</div>
<div class="boks">bliver boks2</div>
<div class="boks">bliver boks3</div>
Avatar billede lolman Nybegynder
02. februar 2010 - 18:49 #4
evt. ....:

<script>
var allHTMLTags = new Array();
function getElementByClass(theClass) {
  var returnArray = new Array(); var b = 0;
  var allHTMLTags=document.getElementsByTagName("body")[0].getElementsByTagName("*");
  for (i=0; i<allHTMLTags.length; i++) {
    if (allHTMLTags[i].className==theClass) {
      returnArray[b] = allHTMLTags[i];
      b++;
    }
  }
  if (returnArray) return returnArray; else return null;
}
window.onload = function() {
  elements = getElementByClass("boks");
  e = getElementByClass("show");
  e[0].innerHTML=elements;
}
</script>

</head>

<body>
<a href="#">sga</a>

<div class="boks">bliver boks1</div>
<div class="boks">bliver boks2</div>
<div class="boks">bliver boks3</div>
<pre class="show"></pre>
Avatar billede alex15 Nybegynder
03. februar 2010 - 22:04 #5
Hmm, kan ikke få koden til at virke. Har prøvet at ændre lidt i den, i forsøget på det, uden held. Hvad kan der være galt?

--- Kode ---

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<style type="text/css">
    .boks {background-color: #FF0000; float:left; width:100px; height:100px;}
</style>

<script language="javascript">
var allHTMLTags = new Array();
function getElementByClass(theClass) {
  var returnArray = new Array(); var b = 0;
  var allHTMLTags=document.getElementsByTagName("body")[0].getElementsByTagName("*");
  for (i=0; i<allHTMLTags.length; i++) {
    if (allHTMLTags[i].className==theClass) {
      returnArray[b] = allHTMLTags[i];
      b++;
    }
  }
  if (returnArray) return returnArray; else return null;
}
window.onload = function() {
  elements = getElementByClass("boks");
  e = getElementByClass("show");
  e[0].innerHTML=elements;
}
</script>


</head>

<body>

<a href="#">sga</a>

<div class="boks">bliver boks1</div>
<div class="boks">bliver boks2</div>
<div class="boks">bliver boks3</div>

<pre class="show"></pre>

</body>
Avatar billede alex15 Nybegynder
03. februar 2010 - 22:28 #6
Jeg stødte på denne her kode på nettet:

http://robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/

Den skulle have fået ret meget ros rundt omkring, og man kalder den på følgende måde:

getElementsByClassName(document.getElementById("container"), "div", ["col", "left"]);

Men forstår stadigvæk ikke hvordan den virker? ;-)
Avatar billede alex15 Nybegynder
04. februar 2010 - 11:29 #7
Har fundet følgende kode som stort set fungere perfekt:

http://www.eksperten.dk/spm/723660

Det eneste problem er dog blot at der ikke findes én knap med følgende funktion:

'Vis alle elementer' -> ved tryk -> 'Fjern alle elementer' -> ved tryk -> 'Vis alle elemter' osv.

Altså én knap, i stedet for to? - Må da være muligt? - Kan i hjælpe mig med sådan en?
Avatar billede mike2002 Nybegynder
04. februar 2010 - 23:54 #8
Jeg ville nu med det samme begynde at bruge jQuery. Deres selector hedder:
$(".myClass");

Herefter kan du gøre, hvad du vil:
$(".myClass").hide("fast"); // eller "slow"

Hvis du har en knap med div id="toggle" kan du så
$("#toggle").toggle(function() {
  $(".myClass").hide("fast");
  },
  function() {
  $(".myClass").show("fast");
)};

Det eneste du skal gøre inden er at linke til jQuery (hos google) eller donwloade den til din webserver og linke til den her.

Derefter skal du placere ovenstående kode sådan:
<script type="text/javascript">
$(document).ready(function() {

$("#toggle").toggle(function() {
  $(".myClass").hide("fast");
  },
  function() {
  $(".myClass").show("fast");
)};

});
</script>

Nå, det var ikke meningen dette indlæg skulle blive så langt, men med jQuery kan du nemt gøre mange ting. Jeg ville kaste mig ud i det, hvis jeg var dig.
Avatar billede alex15 Nybegynder
05. februar 2010 - 09:44 #9
Hov, det sprog ser da ikke helt uinteressant ud. Har lige siddet og læst lidt om det rundt omkring på nettet.

Og det virker også som om at det skulle kører fint på gamle browser systemer også.

Men skal man så downloade deres 'program-fil' ned på ens server eller hvad? via:
www.jquery.com -> http://code.jquery.com/jquery-1.4.1.min.js

Og så burde det fungere?
Avatar billede mike2002 Nybegynder
05. februar 2010 - 09:59 #10
Ja, du skal inkludere filen i dit head-element:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>

Herefter går du i gang med jQuery sådan:

<script type="text/javascript">
  $(document).ready(function() {
    // Her kommer din kode
    $("#toggle").toggle(function() {
      $(".myClass").hide("fast");
      },
      function() {
      $(".myClass").show("fast");
    )};
</script>

  });
</script>
Avatar billede alex15 Nybegynder
05. februar 2010 - 10:14 #11
Går ud fra at det sidste fra koden var en fejl?

Men når jeg nu har sat ovenstående ind, hvorfor laver jeg så selve knappen?

I virkeligheden skal jeg bare kunne gøre følgende:

1. Vis/skjule alle nedenstående bokse via én knap.
2. Vis/skjul enkeltvis af nedenstående bokse. via én knap.

<div id="boks1">boks 1</div>
<div id="boks2">boks 2</div>
<div id="boks3">boks 3</div>
Avatar billede mike2002 Nybegynder
13. februar 2010 - 23:09 #12
Jo, der var to gange "});</script>"

Der er forskellige muligheder. Men det er nemmest, hvis du vælger ud fra en class, hvis du skal vælge flere elementer på en gang:

<div id="boks1" class="minBoks">boks 1</div>
<div id="boks2" class="minBoks">boks 2</div>
<div id="boks3" class="minBoks">boks 3</div>

Så kan du skjule alle vha.

$(document).ready(function() {
    // Her kommer din kode
    $("#skjul-vis").toggle(function() {
      $(".minboks").hide("fast");
      },
      function() {
      $(".minboks").show("fast");
)};

med knappen:
<input type="button" id="skjul-vis" value="Skjul - Vis" />

For at kunne vise/skjule en enkelt boks, må du have en knap til hver enkelt boks. Så kan du vise/skjule sådan:

$(document).ready(function() {
    // Her kommer din kode
    $("#vis-skjul1").toggle(function() {
      $("#boks1").hide("fast");
      },
      function() {
      $("#boks1").show("fast");
)};
Som kan vises/skjules med knappen:
<input type="button" id="skjul-vis1" value="Skjul - Vis boks 1" />

Læg dog mærke til, at funktionerne bliver trigget i den rækkefølge de står. Dvs. første gang du klikker knappen vil den skjule, næste gang vil den vise. Derfor skal du bytte rundt på rækkefølgen, hvis det er en div, der som udgangspunkt er skjult.

Med bytte rundt mener jeg:
$(document).ready(function() {
    // Her kommer din kode
    $("#vis-skjul1").toggle(function() {
      $("#boks1").show("fast");
      },
      function() {
      $("#boks1").hide("fast");
)};

Scriptet virker som sådan fint nok, men du vil opleve, at man skal trykke to gange på knappen før den viser...

-

Hvis du kun vil have én knap, kan du lave en javascript tæller:
var n=1

og så vælge sådan:

$(document).ready(function() {
    // Her kommer din kode
    $("#vis-skjul" + n).toggle(function() {
      $("#boks1").hide("fast");
      n--;
      },
      function() {
      $("#boks1").show("fast");
      n++;
)};

Hmm. Det der virker nok ikke "out of the box" - det er mere ideen i det...
Avatar billede alex15 Nybegynder
05. august 2011 - 17:53 #13
Hej, jeg er igang med at lukke af for mine åbne spørgsmål, så hvis i giver lave et svar, så får i lige nogle point for jeres hjælp.

Jeg beklager at jeg ikke har været bedre til at svare tilbage.

Alex
Avatar billede mike2002 Nybegynder
06. august 2011 - 12:28 #14
Svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester