Как окрасить элементы HTML на основе парсинга пользовательской командной строки

Я работаю над небольшой вещью парсинга к цветовым объектам. Для примера Вы могли ввести red:Hi!: и "Привет!" было бы красным.

Это - мой не рабочий код:

<script type="text/javascript">
function post()
{
    var preview = document.getElementById("preview");
    var submit = document.getElementById("post");
    var text = submit.value;
    <?php str_replace("red:*:",'<i class="red">*</i>',text); ?>
    preview.value = text;
}
</script>
1
задан Anonymous the Great 11 June 2010 в 09:10
поделиться

2 ответа

Здесь у вас как минимум две большие проблемы.

  1. Вы не можете использовать str_replace с подстановочными знаками, как вы это делаете (звездочки, которые вы используете, это просто символ звездочки, а не подстановочный знак).

  2. Ваше представление о процессе рендеринга страницы неверно - вы не можете просто вызвать какой-то PHP-код в JavaScript и заставить его обновить страницу. Любой PHP код будет выполнен и напечатан, когда ваша страница генерируется на сервере - он не может взаимодействовать со страницей, как это может делать JavaScript (JS может, потому что он выполняется в браузере, но браузер никогда не видит ваш PHP код, как вы можете проверить, перейдя в View->Source и посмотрев, что вы видите). Вы определенно не можете ссылаться на переменную JavaScript из PHP.

Два варианта.

Вариант 1 - правильный серверный

Если вы хотите окрашивать объекты при загрузке страницы на основе поста, сделайте что-то вроде этого:

<?php 
  # If the value was posted
  $raw = isset($_POST['userstring']) ? $_POST['userstring'] : "";
  # Split it based on ':'
  $parsed = explode(':', $raw);

  $colorClass = "";
  $text = "";

  if (count($parsed) >= 2)
  {
    $colorClass = $parsed[0];
    $text = $parsed[1];
  }

?>

<form action="" method="post">
  <input type="text" name="userstring" value=""/>
  <input type="submit" value="Submit" />
</form>

<div id="preview">
<?php if (strlen($text) > 0) { ?>
  <i class="<?php echo $colorClass; ?>">
    <?php echo $text; ?>
  </i>
<?php } ?>
</div>

Вариант 2 - правильный клиентский

Включите jQuery в тег , чтобы облегчить себе жизнь. Если вы действительно не хотите включать jQuery, вы можете изменить вызовы jQuery в getElementById и т.д. (вам нужно заменить вызов html() на '.innerhtml', я думаю - просто поищите).

<script type="text/javascript" 
  src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">
</script>

<script type="text/javascript">                           
  function post() {                 
    var split = $('#userinput).val().split(separator, limit)        
    if (split.length >= 2) {     
      var color = split[0];              
      var text = split[1]; 
      $('#preview').html('<i class="' + color + '">' + text + '</i>');    
    }
    return false; // Stop form submit
  }                           
</script> 

<form action="" method="post" onsubmit="post()">
  <input id="userinput" type="text" name="userstring" value=""/>
  <input type="submit" value="Submit" />
</form>
<div id="preview">
</div>
</body>
1
ответ дан 2 September 2019 в 23:49
поделиться

Вы смешиваете здесь технологии на стороне сервера и клиента. Код в php lock оценивается один раз (пока находится на сервере). Вы ищете что-то, что будет работать полностью на стороне клиента.

Это означает, что вам нужно обратить внимание на регулярные выражения Javascript, а не на PHP preg_match.

http://www.regular-expressions.info/javascriptexample.html

Вы ищете вот такие вещи:

stringObject.replace( regularExpressionVarOrLiteral, replacement );

Josh

1
ответ дан 2 September 2019 в 23:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: