Avatar billede showsource Seniormester
22. marts 2007 - 11:57 Der er 14 kommentarer og
1 løsning

Finde alle id'er i et doc

Hvordan kan jeg finde alle id="etellerandet" i et doc?

Som eks:

function my_array($id) {

id_vars = new Array("juhu",
"nejda",
"jups");

var i = 0;
var len = id_vars.length;

    while( i < len ) {

        if($id != id_vars[i]) {
        document.write("<br><b>"+id_vars[i]+"</b>");
        }

    i++;

    }
}

her er det så array'et "id_vars" jeg gerne vil hente dynamisk.
Evt. kun alle id'er hvis navn starter med f.eks. "lag_"....
Avatar billede roenving Novice
22. marts 2007 - 12:20 #1
Hvad og hvordan skal du bruge det ?-)

-- umiddelbart lyder det som nemest at hente alle udgaver af en bestemt slags tag med getElementsByTagName, og så teste dem for de(n) krævede egenskab ...
Avatar billede showsource Seniormester
22. marts 2007 - 12:26 #2
Leger med dette:

<html><head><title>Id test</title>

<script type="text/javascript">

// javascript found at exp.dk

function get_id ($id) {
    if (document.all && document.getElementById) {
    return document.all($id);
    } else if (!document.all && document.getElementById) {
    return document.getElementById($id);
    } else {
    return false;
    }
}

function true_id($id) {

    if (($bcontent = get_id($id))) {
    return $bcontent.style;
    } else {
    return false;
    }

}

function box_click ($id) {

    $bcontent = true_id($id);

    if ($bcontent.visibility == 'hidden') {
    $bcontent.display = '';
    $bcontent.visibility = 'visible';
    } else {
    $bcontent.display = 'none';
    $bcontent.visibility = 'hidden';
    }
}

function close_other($id) {

id_vars = new Array("lag_et",
"lag_to",
"lag_tre");

var i = 0;
var len = id_vars.length;

    while( i < len ) {

        if($id != id_vars[i]) {
        $bcontent = true_id(id_vars[i]);
        $bcontent.display = 'none';
        $bcontent.visibility = 'hidden';
        }

    i++;

    }
}

</script>

</head>

<body>


<form>

<input type="button" value="test et" onclick="box_click('lag_et');close_other('lag_et');">
<input type="button" value="test to" onclick="box_click('lag_to');close_other('lag_to');">
<input type="button" value="test tre" onclick="box_click('lag_tre');close_other('lag_tre');">

</form>

<div id="lag_et" style="position: relative; padding: 8px; visibility: hidden; display: none;">
Et
</div>

<div id="lag_to" style="position: relative; padding: 8px; visibility: hidden; display: none;">
To
</div>

<div id="lag_tre" style="position: relative; padding: 8px; visibility: hidden; display: none;">
Tre
</div>




</body></html>

Altså man kan klikke på en knap, og få vist/skjult et lag.
Men bruges "box_click" alene, vil evt. andre viste lag stadig være synlige.
De skal gemmes, ved klik på knap.
Men i stedet for at putte et nyt "lag-navn" ind i array'et id_vars ville jeg gerne kunne hente dem dynamisk.

getElementsByTagName ? Hvordan virker det?
Avatar billede roenving Novice
22. marts 2007 - 12:33 #3
-- så er det nemmeste at huske, hvilket lag, der blev vist før ...

Prøv f.eks. sådan:

<script type="text/javascript">
var oldElm = null;
function box_click(id){
  elm = document.getElementById(id);
  if(oldElm && oldElm != elm)
    oldElm.style.display = 'none';
  elm.style.display = "block";
  oldElm = elm;
}
window.onload = function(){
  oldElm = document.getElementById('lag_et');
}
</script>

<form>

<input type="button" value="test et" onclick="box_click('lag_et');return false;">
<input type="button" value="test to" onclick="box_click('lag_to');return false;">
<input type="button" value="test tre" onclick="box_click('lag_tre');return false;">

</form>

<div id="lag_et" style="position: relative; padding: 8px; display: block;">
Et
</div>

<div id="lag_to" style="position: relative; padding: 8px; display: none;">
To
</div>

<div id="lag_tre" style="position: relative; padding: 8px; display: none;">
Tre
</div>
Avatar billede showsource Seniormester
22. marts 2007 - 12:45 #4
Du må gerne smide et svar! :O)
Avatar billede roenving Novice
22. marts 2007 - 12:49 #5
Velbekomme '-)
Avatar billede showsource Seniormester
22. marts 2007 - 12:54 #6
Takker for hjælp!

Men kan man finde alle id'er i et doc? :O)
Avatar billede roenving Novice
22. marts 2007 - 13:02 #7
Ja, det kan man godt, men som skrevet i første indlæg, virker det mest hensigtsmæssigt, at bruge getElementsByTagName ...

f.eks.

id_vars = ["juhu","nejda","jups"];
function getAllDivs(){
  var divs = [];
  var elms = document.getElementsByTagName("div");
  for(i=0,im=elms.length;im>i;i++){
    for(j=0,jm=id_vars.length;jm>j;j++){
      if(elms[i].id == id_vars[j])
        divs.push(elms[i]);
    }
  }
  return divs;
}

-- og tak for point ;~}
Avatar billede showsource Seniormester
22. marts 2007 - 13:21 #8
hmm, nu prøver jeg lige så'n her:

function do_print_div() {

  var divs = [];

  var elms = document.getElementsByTagName("div");
  for(i=0,im=elms.length;im>i;i++){
    divs.push(elms[i]);
  }

var i = 0;
var len = divs.length;

    while( i < len ) {
        document.write("<br><b>"+divs[i]+"</b>");
    i++;

    }
}

Den skriver [object] med fed og linie skift! :O)
Hvordan får jeg navnet?
Avatar billede olebole Juniormester
22. marts 2007 - 13:31 #9
<ole>

Prøv:
    document.write("<br><b>"+divs[i].getAttribute("id")+"</b>");

/mvh
</bole>
Avatar billede roenving Novice
22. marts 2007 - 13:33 #10
Det er fordi, du har fat i objekterne, skal du bruge id'et, skal du bede om det (og så skal du bruge en for-løkke, når du har brug for den !-)

-- og husk at document.write sletter det, der var i dokumentet i forvejen ...

var txt ="";
for(i=0,im=divs.length;im>i;i++){
  txt += divs[i].id + "\n";
}
alert(txt);
Avatar billede showsource Seniormester
22. marts 2007 - 13:48 #11
takker, takker, takker !!!
Avatar billede roenving Novice
22. marts 2007 - 13:56 #12
>>ole

*lol*

-- jeg kan godt li' at du bruger document.write ...getAttribute !-)
Avatar billede olebole Juniormester
22. marts 2007 - 14:28 #13
Det er faktisk helt og aldeles efter 'Testamentet' ... det er blot, fordi du vantro har fået XHTML på hjernen, at det undrer dig  ;o)

getAttribute har hørt til alm. (HTML-)DOM siden 98-99 (såvidt jeg husker) - og der er intet i vejen med at bruge document.write under HTML. De to er således helt og aldeles kompatible.
Problemet opstår først med XHTML, fordi document-objektet her skifter rolle - hvilket gør write-metoden ubrugelig.

At det så ikke ligefrem ligner mig at bruge document.write er en hel anden ting ... jeg overså den fuldkommen i eksemplet (copy/paste)  =)
Avatar billede roenving Novice
22. marts 2007 - 14:37 #14
Tjah, jeg er også begyndt at vænne mig til .s/getAttribute, men i sammenhæng med document.write ville jeg simpelthen være så doven, at jeg ikke gad skrive de ekstra 16 tegn !-)
Avatar billede olebole Juniormester
22. marts 2007 - 15:13 #15
Det er vanskeligt at være mere enig i noget somhelst ... bli'r helt nervøs for, om jeg er begyndt at lide af tvangshandlinger på mine ældre dage!  ;oD
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