Autor Zpráva
blaaablaaa
Profil
Ahoj,

potřebuji v JS rozdělit text po větách (tzn. končí tečkou), pokud blok textu přesáhne určitou délku.
Tzn. mám např text "Ahoj. Jsem Karel. Mám <a href="http://www.jpw.cz">auto</a>. Velké auto." a chci ho rozdělit do pole po 10 znacích:
1. Ahoj. Jsem Karel.
2. Mám <a href="http://www.jpw.cz">auto</a>.
3. Velké auto.

Tzn. chci najit prvni tecku po 10 znacich, ktera neni v odkaze ci obrazku (v ostatnich tagech muze byt), a rozdelit text.

Vytvoril jsem toto "dilo", ktere nefunguje (chci delit pokud je blok delsi nez 300 znaku):
            var texts = new Array();
               while ( text.length > 1000 ) {
                  var err = false;
                  var tmp_index = 300;
                  var index = 500;
                  
                  do {
                     index = text.indexOf(".", tmp_index);
                     for ( i = index; i<text.length; i++) {
                        if ( text[i] == "<" ) { err = false; break; }
                        if ( text[i] == ">" ) { tmp_index=i+1; err = true; break; }
                     }
                  } while( err == true );
                                               
                  texts.push(text.substr(0, index + 1));
                  text = text.substr(index + 1, text.length-index);
               } 
               texts.push(text);
 


Existuje nejake lepsi (funkcni) reseni?
mark92
Profil
Čo tak toto?

    <script>
    var text = "Ahoj. Jsem Karel. Mám <a href=\"http://www.jpw.cz\">auto</a>. Velké auto.";

    var texty = new Array("");
    var len = text.length;
    var tag = false;
    var metaznak = false;
    var veta = 0;
    for (a=0; a<len; a++)
      {
      var znak = text.charAt(a);
      if (znak=="\\")
        metaznak=true;
      if (!metaznak)
        {
        if (znak=="<") tag = true;
        if (znak==">") tag = false;
        }
      if (znak=="." && !metaznak && !tag && a>10)
        {
        texty[veta] += ".";
        veta++;
        texty[veta] = "";
        continue;
        }
      texty[veta] += znak;
      if (znak!=="\\" && metaznak)
        metaznak = false;
      }

    for (a=0; a<veta; a++)
      document.write(texty[a]+"<br>");
    </script>
panther
Profil
mark92:
ač nejsem JavaScriptař, při zběžném pohledu na ř. 16 a 17 narazíš, pokud bude v textu většítko nebo menšítko. Pokud ho v proměnné „text“ převedeš na entitu, nejspíše ti nebude muset vcházet ta podmínka s délkou 10 znaků ve větě.
blaaablaaa
Profil
panther: < a > jsou prevedeny na entity. Text rozdeluji po 500 znacich, nepotrebuji presny pocet znaku, jen rozdelit text na mensi casti, takze mi toto reseni vyhovuje.
mark92: diky, funguje

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0