Я работаю над небольшой вещью парсинга к цветовым объектам. Для примера Вы могли ввести 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>
Здесь у вас как минимум две большие проблемы.
Вы не можете использовать str_replace с подстановочными знаками, как вы это делаете (звездочки, которые вы используете, это просто символ звездочки, а не подстановочный знак).
Ваше представление о процессе рендеринга страницы неверно - вы не можете просто вызвать какой-то PHP-код в JavaScript и заставить его обновить страницу. Любой PHP код будет выполнен и напечатан, когда ваша страница генерируется на сервере - он не может взаимодействовать со страницей, как это может делать JavaScript (JS может, потому что он выполняется в браузере, но браузер никогда не видит ваш PHP код, как вы можете проверить, перейдя в View->Source и посмотрев, что вы видите). Вы определенно не можете ссылаться на переменную JavaScript из PHP.
Два варианта.
Если вы хотите окрашивать объекты при загрузке страницы на основе поста, сделайте что-то вроде этого:
<?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>
Включите 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>
Вы смешиваете здесь технологии на стороне сервера и клиента. Код в php lock оценивается один раз (пока находится на сервере). Вы ищете что-то, что будет работать полностью на стороне клиента.
Это означает, что вам нужно обратить внимание на регулярные выражения Javascript, а не на PHP preg_match.
http://www.regular-expressions.info/javascriptexample.html
Вы ищете вот такие вещи:
stringObject.replace( regularExpressionVarOrLiteral, replacement );
Josh