dey: Suchfunktion für Tabelle (JS in XSL)

Hallo,

ich habe eine HTML-Tabelle, die aus XML mit XSL erzeugt wurde.
Im moment haben <tr> und <td> keine weiteren Attribute.
Ich möchte nun die Tablle (Zellenwert oder ein noch zu bestimmendes td-Attribut) durchsuchen lassen nach einem Wert aus einem Input-Feld (wird später via USB-Scanner gefüllt).
Der zu suchende Wert kann mehr als einmal auftreten.
Meine bisherigen Versuche sind allesamt an den Objekten gescheitert: entweder nicht da oder die Eigenschaft wird nicht unterstützt.
Eine Variante über Attribute wäre mir die liebste Variante, weil

  • _ich_! bei XSL den <script></script>-Block nicht finde und alles JS ins onChange packen muß
  • und ich denke, daß es mit getElement ohne Schleifen gehen könnte

Ein derzeitiger Versuch sieht so aus:
<input name="test2" onChange="document.form1.test3.value=document.getElementsByClassName('n007')[0].title;"></input>

bydey

--
-- bydey ist die Signatur und Verabschiedung, nicht der Nick --
-- Navigate all your PHP web projects with  PHP Project Browser--
  1. Hallo dey.

    Im moment haben <tr> und <td> keine weiteren Attribute.
    Ich möchte nun die Tablle (Zellenwert oder ein noch zu bestimmendes td-Attribut) durchsuchen lassen nach einem Wert aus einem Input-Feld (wird später via USB-Scanner gefüllt).

    Vielleicht hilft dir dies hier ein wenig weiter oder liefert dir zumindest einen Ansatz.

    Einen schönen Freitag noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
    1. Hallo,

      Vielleicht hilft dir dies hier ein wenig weiter oder liefert dir zumindest einen Ansatz.

      Bin dicht dran.
      Es wird mir aber immer nur der erste Treffer angezeigt. Weitere Treffer werden nicht angefügt???

      Codeschnipsel:

        
      <SCRIPT LANGUAGE="JavaScript">  
      function readscan(var_a)  
      {  
      obj_table0 = document.getElementsByTagName('table')[0];  
      return_text = "";  
      for (var i = 0; i < obj_table0.rows.length; i++) {  
           if (var_a == obj_table0.rows[i].cells[0].firstChild.nodeValue){  
               if (return_text != "") {return_text = return_text + "; ";}  
               return_text = var_a = obj_table0.rows[i].cells[1].firstChild.nodeValue;  
               alert (return_text + " " + i);  
              }  
        
      }  
      alert (return_text);  
      }  
        
      </SCRIPT>  
      <table name="table1" >  
      <tr>  
       <td>0815</td>  
       <td>1-1</td>  
      </tr>  
      <tr>  
       <td>007</td>  
       <td>1-2</td>  
      </tr>  
      <tr>  
       <td>0815</td>  
       <td>1-3</td>  
      </tr>  
      <tr>  
       <td>4711</td>  
       <td>1-4</td>  
      </tr>  
      <tr>  
       <td>4711</td>  
       <td>1-5</td>  
      </tr>  
      </table>  
      
      

      bydey

      --
      -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
      -- Navigate all your PHP web projects with  PHP Project Browser--
      1. Hallo,

        return_text = var_a = obj_table0.rows[i].cells[1].firstChild.nodeValue;

        Bin ja so blind
        = var_a ist natürlich Quatsch!
        So

          
        return_text = return_text + obj_table0.rows[i].cells[1].firstChild.nodeValue;  
        
        

        funktioniert es in reiner HTML-Umgebung, aber nicht innerhalb xsl:

          
        <input name="scanfield" onChange="  
        obj_table0 = document.getElementsByTagName('table')[0];  
        return_text = "";  
        for (var i = 0; i < obj_table0.rows.length; i++) {  
             if (this.value == obj_table0.rows[i].cells[0].firstChild.nodeValue){  
                 if (return_text != "") {return_text = return_text + " or ";}  
                 return_text = return_text + obj_table0.rows[i].cells[1].firstChild.nodeValue;  
             }  
        }  
        "></input>  
        
        

        erzeugt den Fehler: Stylesheet may be not well-formed. Auslagern als Funktion funktioniert _bei mir_ nicht da diese Funktion dann nicht gefunden wird.

        bydey

        --
        -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
        -- Navigate all your PHP web projects with  PHP Project Browser--
        1. Tach dey,

          funktioniert es in reiner HTML-Umgebung, aber nicht innerhalb xsl:

          <input name="scanfield" onChange="
          obj_table0 = document.getElementsByTagName('table')[0];
          return_text = "";
          for (var i = 0; i < obj_table0.rows.length; i++) {
               if (this.value == obj_table0.rows[i].cells[0].firstChild.nodeValue){
                   if (return_text != "") {return_text = return_text + " or ";}
                   return_text = return_text + obj_table0.rows[i].cells[1].firstChild.nodeValue;
               }
          }
          "></input>

          
          > erzeugt den Fehler: Stylesheet may be not well-formed. Auslagern als Funktion funktioniert \_bei mir\_ nicht da diese Funktion dann nicht gefunden wird.  
            
          Verwende ein Attribute Value Template (AVT), d. h. die {...}-Schreibweise:  
            
          `<input name="scanfield" onchange="{JS-Code}/>`{:.language-xml}  
            
          Im JS-Code müssen noch <-Zeichen als &lt; und &-Zeichen als &amp; ausgezeichnet werden, >-Zeichen als &gt; im Falle der Verwendung mit ]]> (etwa bei Array-Konstrukten: bla[blub[0]]>123, wobei hier schon ein Leerzeichen vor dem > reichen würde).  
            
          Man liest sich,  
          svg4you
          
          1. <input name="scanfield" onchange="{JS-Code}/>

            Sorry, Anf.-zeichen vergessen:

            <input name="scanfield" onchange="{JS-Code}"/>

            Man liest sich,
            svg4you

          2. Hallo,

            funktioniert es in reiner HTML-Umgebung, aber nicht innerhalb xsl:

            <input name="scanfield" onChange="
            obj_table0 = document.getElementsByTagName('table')[0];
            return_text = "";
            for (var i = 0; i < obj_table0.rows.length; i++) {
                 if (this.value == obj_table0.rows[i].cells[0].firstChild.nodeValue){
                     if (return_text != "") {return_text = return_text + " or ";}
                     return_text = return_text + obj_table0.rows[i].cells[1].firstChild.nodeValue;
                 }
            }
            "></input>

            
            > > erzeugt den Fehler: Stylesheet may be not well-formed. Auslagern als Funktion funktioniert \_bei mir\_ nicht da diese Funktion dann nicht gefunden wird.  
            >   
            > Verwende ein Attribute Value Template (AVT), d. h. die {...}-Schreibweise:  
            >   
            > `<input name="scanfield" onchange="{JS-Code}" />`{:.language-xml}  
              
            Und was bringt das?  
            Dann versucht der XSL-Prozessor das zu interpretieren, als XSL/XPath-Ausdruck.  
              
            Du meinst sicher:  
              
            ~~~xml
              
            <input name="scanfield">  
               <xsl:attribute name="onchange">  
                 JS-Code, Sonderzeichen maskiert ...  
               <xsl:attribute>  
            </input>  
            
            

            Grüße
            Thomas

            1. Hallo Thomas,

              Verwende ein Attribute Value Template (AVT), d. h. die {...}-Schreibweise:

              <input name="scanfield" onchange="{JS-Code}" />

              Und was bringt das?
              Dann versucht der XSL-Prozessor das zu interpretieren, als XSL/XPath-Ausdruck.

              Du meinst sicher:

              <input name="scanfield">
                 <xsl:attribute name="onchange">
                   JS-Code, Sonderzeichen maskiert ...
                 xsl:attribute
              </input>

              Das Beispiel von svg4you läuft soweit.  
              Allerdings ist mein Rückgabewert für die Tabellenzelle 2 einer jeden Zeile bei der Tabelle aus XML-daten mit XSL geparst NULL. Bei meiner handgestrickten HTML-Tabelle funktioniert es alles schon!  
                
              Am Rande: das Paket liegt wieder auf meinem Schreibtisch ?8-| + >:-(  
                
              bydey
              
              -- 
              \-- bydey ist die Signatur und Verabschiedung, nicht der Nick --  
                
              \-- Navigate all your PHP web projects with  [PHP Project Browser](http://deynews.de/ppb/)--
              
              1. Hallo,

                vielleicht nicht state-of-art, aber gelöst. Nachdem ich die NULLs nicht gegen Werte tauschen konnte habe ich mir die Werte selbst gestrickst

                  
                <tr>  
                <xsl:attribute name="title"><xsl:value-of select="fsPartNum"/></xsl:attribute>  
                ....  
                
                

                und mit folgendem code durchsucht:

                  
                <form name="scanarea2">  
                <textarea name="debug_area" style="float:right;display:none" cols="50" rows="5">debug:</textarea>  
                <input name="scanfield" onChange="  
                cfg_col_partnumber=1;  
                cfg_col_slot=0;  
                search_string=this.value;  
                //document.scanarea2.debug_area.value='debug:'+this.value;  
                obj_table = document.getElementsByTagName('table')[0];  
                obj_table_tr=obj_table.document.getElementsByTagName('tr')  
                return_text = '';  
                for (var i = 0; i &lt; obj_table_tr.length; i++) {  
                     if (search_string == obj_table_tr[i].title){  
                  
                         if (return_text != '') {return_text = return_text + '; ';}  
                         return_text = return_text + obj_table_tr[i].id;  
                        }  
                }  
                document.scanarea2.scanresult.value=this.value;  
                document.scanarea2.partnumber.value=this.value;  
                document.scanarea2.position.value=return_text+document.scanarea2.position.value;  
                "></input>  
                <input name="scanresult" onFocus="document.scanarea2.scanfield.focus();document.scanarea2.scanfield.value=''"></input>  
                <br/>  
                <input name="partnumber"></input> --&gt; <input name="position"></input>  
                </form>  
                
                

                Vermutlich mal wieder gemurkst auf ganzer Linie, scheint aber zu funktionieren!?

                bydey

                --
                -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
                -- Navigate all your PHP web projects with  PHP Project Browser--
              2. hi day,

                Am Rande: das Paket liegt wieder auf meinem Schreibtisch ?8-| + >:-(

                Irre!
                 --> deutschepost.de || lass mal gut sein

                ;-)

                Grüße
                Thomas

            2. Tach Thomas,

              Und was bringt das?
              Dann versucht der XSL-Prozessor das zu interpretieren, als XSL/XPath-Ausdruck.

              Du meinst sicher:

              <input name="scanfield">
                 <xsl:attribute name="onchange">
                   JS-Code, Sonderzeichen maskiert ...
                 xsl:attribute
              </input>

                
              Ja klar, hier sollte ja nichts ausgewertet werden. Danke für die Korrektur.  
                
              Man liest sich,  
              svg4you