Avatar billede supermand69 Nybegynder
13. januar 2005 - 23:06 Der er 17 kommentarer og
1 løsning

finde et elm med et specifikt id

hvordan kan jeg undersøge om en <span> med et specifikt id eksisterer?
Avatar billede -mundi- Nybegynder
13. januar 2005 - 23:11 #1
<script type="text/javascript">
function findesElementet(id){
    return document.getElementById(id)!=null
}
alert(findesElementet("elementid"))
</script>
Avatar billede skovenborg Nybegynder
13. januar 2005 - 23:12 #2
du kan teste om document.getElementById("spanId") eksisterer:
if (document.getElementById("spanId")) {
  // span element eksister
}
else {
  // og hvis ikke.
}

Her kan det være en fordel at skrive:
elm = document.getElementById("spanId");
if (elm) {
  // osv.
}
så du ikke behøver hente elementet igen hvis det nu eksisterer.
Avatar billede supermand69 Nybegynder
13. januar 2005 - 23:17 #3
det er fordi jeg har en funktion.. men hvis den span findes i forvejen skal den bare opdatere stylesheet i den :) altså ændre img src

function fix_png(myImage)
{
    if(document.all)
    {
        if(myImage.id) var imgID = 'id="' + myImage.id + '" ';
        if(myImage.className) var imgClass = 'class="' + myImage.className + '" ';
        if(myImage.style) var imgStyle = myImage.style.cssText;
        if(myImage.parentElement.href) imgStyle += 'cursor:hand; cursor:pointer;';
       
        myImage.outerHTML = '<span ' + imgID + imgClass
            + ' style="' + 'width:' + myImage.width + 'px; height:' + myImage.height + 'px; ' + imgStyle + ';'
            + 'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + myImage.src + '\', sizingMethod=\'scale\');"></span>';
    }
}
Avatar billede supermand69 Nybegynder
13. januar 2005 - 23:17 #4
jeg vil egentlig også gerne vide om min funktion sletter mit img tag og erstatter det med en span??
Avatar billede softspot Forsker
13. januar 2005 - 23:31 #5
Vær her opmærksom på at flg. kode

if(myImage.id) var imgID = 'id="' + myImage.id + '" ';
if(myImage.className) var imgClass = 'class="' + myImage.className + '" ';
if(myImage.style) var imgStyle = myImage.style.cssText;


giver dig nogle lokale variable (imgID, imgClass, imgStyle) som ikke er definerede når dine if-sætninger går ud af scope, dvs. for disse if-sætningers vedkommende i næste linie. Det betyder at de ikke er definerede længere.
Hvis du vil have at de har en veldefineret værdi når du skal benytte dem senere i din funktion skal du erklære dem udenfor dine if-sætninger...

Hvis du skal undersøge om dit image bliver udskiftet med et span-element, kan du efterfølgende hente elementet (document.getElementById(imageid)) og checke om tagName er lig med "SPAN" eller "IMG" (gæt selv selv konsekvenserne af de to ;o))...
Avatar billede skovenborg Nybegynder
13. januar 2005 - 23:32 #6
hvis jeg forstår det rigtigt (er ikke særlig pæn, men det ser vi lige bort fra nu, og der er sikkert fejl i css-sætningen, men hvis der er kan du lige checke for anførselstegn og den slags. Det kræver du har skrevet den rigtigt op selv fra starten af):
function fix_png(myImage)
{
    if(document.getElementById)
    {
        elm = document.getElementById(myImage);
        if(elm.id) var imgID = 'id="' + myImage.id + '" ';
        if(elm.className) var imgClass = 'class="' + myImage.className + '" ';
        if(elm.style) var imgStyle = myImage.style.cssText;
        if(elm.parentElement.href) imgStyle += 'cursor:hand; cursor:pointer;';
        span = document.getElementById(imgID);
        css = 'width:' + myImage.width + 'px; height:' + myImage.height + 'px; ' + imgStyle + ';'
            + 'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + myImage.src + '\', sizingMethod=\'scale\')'
        if (span) {
        myImage.outerHTML = '<span ' + imgID + imgClass
            + ' style="'+css+'"></span>';
    }
}
else {
    span.cssText = css;
}
}
Avatar billede skovenborg Nybegynder
13. januar 2005 - 23:33 #7
span.style.cssText = css;
skulle der stå. cssText er dog ikke så udbredt endnu (virker i hvert fald i IE og nyere Mozilla versioner), men det er ret bøvlet at ordne det ellers.
Avatar billede supermand69 Nybegynder
13. januar 2005 - 23:40 #8
hvis der i forvejen eksistere en span med det pågældende id skal den kun gå ind at skifte min src ud

hvis du prøver at se her går det lidt galt når man trykker på min knap :( mit img fejler i bunden

http://clark.avansis.dk/test/test.php
Avatar billede supermand69 Nybegynder
15. januar 2005 - 21:25 #9
jeg er kommet frem til følgende... ser det rigtigt ud? det virker som det skal men vil lige være sikker på at det er lavet 100% korrekt :)

function fix_png(elm)
{
    if(document.all)
    {
        if(elm.tagName == 'IMG')
        {
            if(elm.id) var elm_id = 'id="' + elm.id + '" ';
            if(elm.className) var elm_class = 'class="' + elm.className + '" ';
            if(elm.style) var elm_style = elm.style.cssText;
            if(elm.parentElement.href) elm_style += 'cursor:hand; cursor:pointer;';
           
            elm.outerHTML = '<span ' + elm_id + elm_class
                + ' style="' + 'width:' + elm.width + 'px; height:' + elm.height + 'px; ' + elm_style + ';'
                + 'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + elm.src + '\', sizingMethod=\'scale\');"></span>';
        }
        else elm.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + elm.src + '\', sizingMethod=\'scale\')';
    }
}
Avatar billede softspot Forsker
15. januar 2005 - 23:49 #10
Det eneste jeg lige kan få øje på er at hvis dine if-sætninger

if(elm.id) var elm_id = 'id="' + elm.id + '" ';
if(elm.className) var elm_class = 'class="' + elm.className + '" ';
if(elm.style) var elm_style = elm.style.cssText;
if(elm.parentElement.href) elm_style += 'cursor:hand; cursor:pointer;';

ikke evaluerer til true, så står du med nogle udefinerede variable i sætningen:

elm.outerHTML = '<span ' + elm_id + elm_class
              + ' style="' + 'width:' + elm.width
              + 'px; height:' + elm.height
              + 'px; ' + elm_style + ';'
              + 'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\''
              + elm.src + '\', sizingMethod=\'scale\');"></span>';

Jeg vil derfor anbefale at du i det mindste erklærer disse variable i starten af det scope hvor de skal benyttes.
Avatar billede olebole Juniormester
16. januar 2005 - 02:22 #11
<ole>

Hvorfor overhovedet bruge fix_png-funktionen?
Du slipper for tvivlsomme hacks, hvis du bruger PNG8-formatet. Det har jeg ikke oplevet, IE har synderlig problemer med - og så kunne du jo vente med at bruge PNG24, til også IE understøtter dette format  :)

/mvh
</bole>
Avatar billede supermand69 Nybegynder
16. januar 2005 - 10:09 #12
softspot > er ikke helt med. gider du lave et eksempel? :)

ole > jamen ved 8bit bliver den transparency ikke ret pæn.. meget hakket :(
Avatar billede olebole Juniormester
16. januar 2005 - 17:02 #13
Det er kun et spørgsmål om at kunne lidt billedbehandling. Hvad transparents angår  fungerer PNG8 ligeså godt/dårligt som GIF - og den algoritme har man uden de store problemer kunne bruge de sidste 10 år på WWW  :)
Naturligvis bliver kanten mere takket, men kanten kan næsten altd laves, så det ikke kan ses, at den er takket.
Avatar billede supermand69 Nybegynder
16. januar 2005 - 17:12 #14
jeg synes bare ikke rigtig jeg har kunne lave nogle sådan ok kanter... de bliver mere hakkede end ved GIF når jeg laver det
Avatar billede softspot Forsker
16. januar 2005 - 17:15 #15
Jeg ville i stedet benytte flg. kode:

function fix_png(elm)
{
    if(document.all)
    {
        if(elm.tagName == 'IMG')
        {
            var elm_id = '';
            var elm_class = '';
            var elm_style = '';

            if(elm.id) elm_id = 'id="' + elm.id + '" ';
            if(elm.className) elm_class = 'class="' + elm.className + '" ';
            if(elm.style) var elm_style = elm.style.cssText;
            if(elm.parentElement.href) elm_style += 'cursor:hand; cursor:pointer;';

            elm.outerHTML = '<span ' + elm_id + elm_class
              + ' style="' + 'width:' + elm.width
              + 'px; height:' + elm.height
              + 'px; ' + elm_style + ';'
              + 'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\''
              + elm.src + '\', sizingMethod=\'scale\');"></span>';

            // ...og hvad der ellers måtte være af kode i denne funktion... :)
        }
    }
}

Jeg håber du ser hvad jeg mener :)
Avatar billede supermand69 Nybegynder
16. januar 2005 - 17:32 #16
det her er vel det eneste du har tilføjet?

var elm_id = '';
var elm_class = '';
var elm_style = '';
Avatar billede softspot Forsker
16. januar 2005 - 17:40 #17
Ja (og fjernede "var"-nøgleordet fra "kroppen" af if-sætningerne), det er korrekt, men jeg lavede det hele for komplethedens skyld...
Avatar billede supermand69 Nybegynder
16. januar 2005 - 19:01 #18
ok... tak for hjælpen, nu ved jeg i hvert fald det til en anden gang ;)
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