Autor Zpráva
Camo
Profil
Zdravím vás!
Chcel som urobiť takú funkciu, ktorá by v texte ohraničenom tagom <code> nahradila znaky <>"& za entity. Text na spracovanie dostáva z textarey. Keď si skopírujete kód čo som sem prilepil tak to bude fungovať. Ale len dovtedy, kým neodriadkujete ten text na niektorom mieste.
Skúšam to už pol ďňa, ale už neviem v čom to môže byť... Proste ten regulár skončí na konci riadku. Skúšal som to už všeliako napr. (.|\n) alebo ([.\n]) ([.\s]) modifikator m atd. ale nič nepomáha...
Nevie niekto v čom to je? Ďakujem...

<!DOCTYPE HTML public "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<style>
html, body{height:100%; margin:0px; padding:0px; font:1em Verdana}
#obal{width:960px; margin:0px auto; padding:50px 0px; background-color:#dddddd; padding-top:50px}
textarea, input{display:block; margin:10px auto; width:800px;}
code{display:block; padding:10px; background-color:#ddeeff}
</style>
<script type-"text/javascript">

function replaceLev1(text){
        var codeText=text.replace(/(<code>)(.*)(<\/code>)/gm, replaceLev2);
        var idcko1 = document.getElementById('idcko1');
        idcko1.innerHTML = codeText;
        alert("Toto je idcko1.innerHTML:\n\n"+codeText);

   function replaceLev2(match, x1, x2, x3, pos, orginal){
      return x2.replace(/[<>&"]/mg, replaceLev3);

      function replaceLev3(match2, pos, originalx2){
         switch(match2){
            case "<" :
               return "&lt;";
            case ">" :
               return "&gt;";
            case '"' :
               return "&quot;";
            case "&" :
               return "&amp;";
          }
      }
   }
}

</script>
</head>
<body style="">
<div id="obal">
<form name="formika" action="bla.php" method="post">
<textarea name="area" id="textik" cols="50" rows="20"><code><?php echo "jjjj"; ?></code></textarea>
<a href="#" onclick="replaceLev1(document.getElementById('textik').value); return false">click</a>
</form>

<div id="idcko1" style="">
</div>

</div>
</body>
</html>
Camo
Profil
Tak som to konečne zistil. Rieši sa to takto: ([\s\S]*)
http://www.regular-expressions.info/javascript.html
Camo
Profil
Ešte ak dovolíte, tak mám s tým problém. Potreboval by som U modifikátor, ktorý JS nepozná. Totiž ak mám
<code>
<?php echo "jjjj"; ?>
</code>
<div style="background-color:red">dgsdfgsdg</div>
<code>
<?php echo "jjjj"; ?>
</code>

tak aj ten div mi oescapuje, co nechcem. Skúšal som to cez otáznik za kvantifikatorom (<\/code>)?? ale neberie mi to. Nevie niekto ako na to? Kód dole si stačí pastnuť a bude fungovať. Je tam aj komentar, ktorý si môžete skopírovať do tej textarey...
<!DOCTYPE HTML public "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<style>
html, body{height:100%; margin:0px; padding:0px; font:1em Verdana}
#obal{width:960px; margin:0px auto; padding:50px 0px; background-color:#dddddd; padding-top:50px}
textarea, input{display:block; margin:10px auto; width:800px;}
code{display:block; padding:10px; background-color:#ddeeff}
</style>
<script type="text/javascript">

function replaceLev1(text){
        var codeText=text.replace(/<code>([\s\S]*)(<\/code>)??/g, replaceLev2);
        alert(codeText);
        codeText = codeText.replace(/^[\s\S]?<br>/, '');
        codeText = codeText.replace(/<br>$/, '');
        var idcko1 = document.getElementById('idcko1');
        idcko1.innerHTML = '<code>'+codeText+'</code>';
        alert("3>>Toto je idcko1.innerHTML:\n\n"+codeText);

   function replaceLev2(match, x1, x2, x3, pos, orginal){
      return x1.replace(/[<>&"\n]/mg, replaceLev3);

      function replaceLev3(match2, pos, originalx2){
         switch(match2){
            case "<" :
               return "&lt;";
            case ">" :
               return "&gt;";
            case '"' :
               return "&quot;";
            case "&" :
               return "&amp;";
            case '\n' :
               return "<br>";
          }
      }
   }
}

/* <code>
<?php echo "jjjj"; ?>
</code>
<div style="background-color:red">dgsdfgsdg</div>
<code>
<?php echo "jjjj"; ?>
</code>
*/

</script>
</head>
<body style="">
<div id="obal">
<form name="formika" action="bla.php" method="post">
<textarea name="area" id="textik" cols="50" rows="20"><code><?php echo "jjjj"; ?></code></textarea>
<a href="#" onclick="replaceLev1(document.getElementById('textik').value); return false">click</a>
</form>

<div id="idcko1" style="">
</div>

</div>
</body>
</html>
YoSarin
Profil
Camo:
Obávám se, že ten otazník jsi zkoušel na špatném místě:
var codeText=text.replace(/<code>([\s\S]+?)(<\/code>)/g, replaceLev2);
Camo
Profil
YoSarin
Dík, to je ono.


Ak by sa niekomu chcelo tak mi napíšte svoje pripomienky k tomuto kódu...
Final version:
<!DOCTYPE HTML public "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<style>
html, body{height:100%; margin:0px; padding:0px; font:1em Verdana}
#obal{width:960px; margin:0px auto; padding:50px 0px; background-color:#dddddd; padding-top:50px}
textarea, input{display:block; margin:10px auto; width:800px;}
code{display:block; padding:10px; background-color:#ddeeff}
</style>
<script type-"text/javascript">

function replaceLev1(text){
        var codeText=text.replace(/<code>([\s\S]*?)<\/code>/g, replaceLev2);
	    alert('codeText:\n\n'+codeText);
	    var idcko1 = document.getElementById('idcko1');
	    idcko1.innerHTML = codeText;
        alert("idcko1.innerHTML:\n\n"+codeText);

   function replaceLev2(match, x1, x2, x3, pos, orginal){
		x1 = x1.replace(/[<>&"\n]/mg, replaceLev3);
		x1 = x1.replace(/^[\s\S]?<br>/, '');
		x1 = x1.replace(/<br>$/, '');
		return  '<code>'+x1+'</code>';

      function replaceLev3(match2, pos, originalx2){
           switch(match2){
              case "<" :
                 return "&lt;";
              case ">" :
                 return "&gt;";
              case '"' :
                 return "&quot;";
              case "&" :
                 return "&amp;";
	          case '\n' :
		         return "<br>";
	      }
      }
   }
}

/* <code>
<?php echo "jjjj"; ?>
</code>
<div style="background-color:red; margin:10px 0px">dgsdfgsdg</div>
<code>
<?php echo "jjjj"; ?>
</code>
*/

</script>
</head>
<body style="">
<div id="obal">
<form name="formika" action="bla.php" method="post">
<textarea name="area" id="textik" cols="50" rows="20"><code><?php echo "jjjj"; ?></code></textarea>
<a href="#" onclick="replaceLev1(document.getElementById('textik').value); return false">click</a>
</form>

<div id="idcko1" style="">
</div>

</div>
</body>
</html>

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