/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Søgning i array, og markering af
Fra : Kasper Johansen


Dato : 04-01-06 13:52

Hej gruppe.

Jeg er ved at lave et kundesystem, hvor at man kan søge efter kunder.

Ved søgningen vil jeg bare have et enkelt tekstfelt, hvori man kan
skrive fornavn, efternavn, telefonnummer eller whatever, hvorefter den
så finder det, ud fra en søgning i en MySQL-database.

Når kunden er fundet via. navn, vil jeg have den til at udskrive navnet,
med teksten i tekstfeltet markeret.

Jeg replacer derfor det indtastede ud med:
"<font style="background-color: blue; color: white;">Indtastet
tekst</font>".


Problemet er så, at hvis der er skrevet flere ord (jeg laver split() på
mellemrum), så kan den jo komme til at replace min HTML-kode (altså hvis
den allerede har markeret noget, vil der allerede være HTML i det den
replacer, og jeg kan få et tilfælde lignende dette:

Indtast:

<font style="background-<font style="background-color: blue; color:
white;">color</font>: blue; color: white;">lala</font>la


Her har den altså erstattet HTML'en ud med HTML, så der står to tags
oven i hinanden.

Lige umiddelbart har jeg svært ved at tænke mig frem til en løsning.

Er der nogen der har nogen forslag?


Koden til søgningsscriptet kan ses her:

<script language="JavaScript">
ar_ids = new Array();

ar_fornavn = new Array();
ar_efternavn = new Array();
ar_telefon_hjem = new Array();
ar_telefon_arbejde = new Array();
ar_telefon_mobil = new Array();

tex_search = document.getElementById("texsearch");
div_result = document.getElementById("divresult");

tex_search.focus();

<?
   $count = 0;
   $f_gk = mysql_query("SELECT * FROM ebs_kunder WHERE aboid =
'$in_abo[nr]' ORDER BY fornavn, efternavn") or die(mysql_error());
   while($d_gk = mysql_fetch_assoc($f_gk)){
      $count++;
      
      ?>
         ar_ids[<?=$count?>] = "<?=$d_gk[nr]?>";
         
         ar_fornavn[<?=$d_gk[nr]?>] = "<?=$d_gk[fornavn];?>";
         ar_efternavn[<?=$d_gk[nr]?>] = "<?=$d_gk[efternavn];?>";
         ar_telefon_hjem[<?=$d_gk[nr]?>] = "<?=$d_gk[telefon_hjem]?>";
         ar_telefon_arbejde[<?=$d_gk[nr]?>] = "<?=$d_gk[telefon_arbejde]?>";
         ar_telefon_mobil[<?=$d_gk[nr]?>] = "<?=$d_gk[telefon_mobil]?>";
      <?
   }
?>

function search_change(){
   div_result.innerHTML = "";
   count_found = 0;
   
   if (tex_search.value.length > 0){
      mysplit = tex_search.value.split(" ");
      
      for(i_ids in ar_ids){
         tha_found = true;
         tha_string = ar_fornavn[i_ids] + " " + ar_efternavn[i_ids];
         tha_origstring = tha_string;
         
         for(i_words in mysplit){
            tha_word = mysplit[i_words];
            tha_word_found = false;
            
            if (tha_word.length > 0){
               if (tha_word_found == false &&
ar_fornavn[i_ids].toLowerCase().indexOf(tha_word.toLowerCase()) > -1){
                  tha_word_found = true;
               }
               
               if (tha_word_found == false &&
ar_efternavn[i_ids].toLowerCase().indexOf(tha_word.toLowerCase()) > -1){
                  tha_word_found = true;
               }
               
               if (tha_word_found == false &&
ar_telefon_hjem[i_ids].toLowerCase().indexOf(tha_word.toLowerCase()) > -1){
                  tha_word_found = true;
               }
               
               if (tha_word_found == false &&
ar_telefon_arbejde[i_ids].toLowerCase().indexOf(tha_word.toLowerCase())
> -1){
                  tha_word_found = true;
               }
               
               if (tha_word_found == false &&
ar_telefon_mobil[i_ids].toLowerCase().indexOf(tha_word.toLowerCase()) > -1){
                  tha_word_found = true;
               }
               
               if (tha_word_found == true){
                  tha_start = tha_string.toLowerCase().indexOf(tha_word.toLowerCase());
                  
                  if (tha_start >= 0){
                     tha_end = tha_word.length;
                     
                     tha_marked = tha_string.substr(tha_start, tha_end);
                     tha_startstring = tha_string.substr(0, tha_start);
                     tha_endstring = tha_string.substring(tha_start + tha_end);
                     
                     tha_string = tha_startstring + "<font style=\"background-color:
#316AC5; color: white;\">" + tha_marked + "</font>" + tha_endstring;
                  }
               }else{
                  tha_found = false;
               }
            }
         }
         
         if (tha_found == true){
            div_result.innerHTML = div_result.innerHTML + "<br>" + tha_string;
            count_found++;
         }
      }
      
      if (count_found == 0){
         div_result.innerHTML = "<i>Der blev ikke fundet nogle resultater.</i>";
      }
   }else{
      div_result.innerHTML = "<i>Indtast noget i søgningsfeltet.</i>";
   }
}
</script>


--
Med venlig hilsen
Kasper Johansen

 
 
Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408514
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste