webForumDet fria alternativet

"this.div"-fråga

6 svar · 323 visningar · startad av haider

haiderMedlem sedan jan. 2003988 inlägg
#1

Tjena

Jag undrar om följande sätt o jobba är korrekt.

om man har ett antal div:ar, och inne i vardera div har jag en DWF film.
För att spela upp eller stoppa, använder jag följande kod:

<button onClick="FilmNamnet.Play();"> ...
samt
<button onClick="FilmNamnet.Stop();"> ...

Kan man istället för att ge varje SWF en egen ID (ovan FilmNamnet), använda sig av "this"? Alltså att <button> pekar till SWF filmen som finns i en o samma DIV (this.div)
På så vis så kan alla SWF-filmer ha samma 'name' men bli separerade genom DIV:arna som har olika namn?

Går det, o isåfall hur gör jag?

Peter SMedlem sedan dec. 20025 484 inlägg
#2

Om <button> ligger i samma <div> och du vet var filmobjektet ligger och objektet ligger på samma ställe i varje <div>:

<button onclick="this.parentNode.parentNode.childNodes[[b]n[/b]].[i]Method[/i]()">

Där n är positionen i <div>:en.

haiderMedlem sedan jan. 2003988 inlägg
#3

Oj, det här var _lite_ svårt för mig att förstå. Vad menas med position? Menar du vilken av divvarna?

om vi säger att diven ser ut så, enkelt uttryckt:
<div id="alfa"><object id="filmen"><button></div>
<div id="beta"><object id="filmen"><button></div>
<div id="gamma"><object id="filmen"><button></div>

kan du förklara hur n, alltså positionen kommer in i bilden, så kommer jag säkert att förstå.

Tack Peter!

Peter SMedlem sedan dec. 20025 484 inlägg
#4
<div id="alfa">
  <object id="filmen">
  <form>
    <button>
  </form>
</div>
<div id="beta">
  <form>
    <button>
  </form>
  <object id="filmen">
</div>

I "alfa" kommer positionen för <object> att vara 0 eller 1 (beroende på webbläsare), d.v.s. childNodes[0] eller childNodes[1].

I "beta" kommer detta index att vara annorlunda eftersom <object> inte ligger på samma position inom respektive <div>. :)

Hur som helst; kan du inte göra en liten funktion?

<script>

function f(o, s){
  o = o.parentNode;

  while (o && o.nodeName.toLowerCase() != "div"){
    o = o.parentNode;
  }

  var cn = o.childNodes,
      n  = cn.length;
  while (n--){
    if (cn[n].nodeName.toLowerCase() == "object"){
      switch (s){
	case "Play": cn[n].Play(); break;
        case "Stop": cn[n].Stop(); break;
        default: //
      }

      break;
    }
  }
}

</script>

<div id="alfa">
  <form>
    <button type="button" onclick="f(this, 'Play')"></button>
  </form>
  <object id="filmen1"></object>
</div>
<div id="beta">
  <object id="filmen2"></object>
  <form>
    <button type="button" onclick="f(this, 'Play')"></button>
  </form>
</div>
haiderMedlem sedan jan. 2003988 inlägg
#5

Ska testa på det hemma.

Men man kan alltså inte nå den omedelbart ovanpåliggande parent-noden? För om vi tänker på svenska i javascript form, så skulle man kunna säga this.parent och sen .filmNamnet.Play, eller hur?

Jag tänkte bara på att det kanske därför kan bli kortare. Du har gjort det snyggt genom att en o samma knapp playar o stoppar. Den gamla metoden hade två knappar, men de krävde att man skrev filmNamn.Play(), och det fick mig att tänka på att om man anger filmNamn, fast i den div man just befinner sig i.

Peter SMedlem sedan dec. 20025 484 inlägg
#6

Möjligtvis i IE. Om <object> har id = filmNamn, kan den i IE nås med filmNamn.Play(). I normala fall användes document.getElementById.

Det gäller att få tag i en referens till <div>:en, t.ex. med this.parentNode.parentNode i FF. Problemet med den metoden är att den ger olika resultat beroende på webbläsaren. Att då använda en funktion, som jag gjort ovan, kan det problemet lösas.

:)

haiderMedlem sedan jan. 2003988 inlägg
#7

ojdå, här blev det fel.

oj, jag råkade skapa en "ny tråd" här mitt i.

Så den är borttagen.

Hoppas ingen råkade se den komma o försvinna; det var ingen deja vu, bara jag som inte var helt pigg. sorry

Genererad på 385 ms · cache AV · v20260730165559-full.f96bc7eb