строка в PHP против строки в JavaScript - PullRequest
3 голосов
/ 17 января 2012

Вот простой код, с которым у меня проблема:

<label id="label1">
<?php
echo "Text inside label1";
?>
</label>

<script language="JavaScript" type="text/javascript">
  var text = document.getElementById("label1").innerHTML;

  alert(text);    // show what's in variable 'text'

  if(text == "Text inside label1")
  {
    alert("I am inside.");
  }
  else
  { 
    alert("No.");
  }

</script>

Проблема в том, что первое предупреждение показывает «Текст внутри label1» (как и должно быть), а второе показывает «Нет». ".Когда я попытался написать текст прямо в html (не через php), он работал нормально => второе предупреждение показало «Я внутри».Я понятия не имею, в чем проблема.Может ли быть проблема с некоторыми различиями между строковыми типами (php или JS) или что-то вроде этого?

Спасибо за любые идеи

Ответы [ 6 ]

5 голосов
/ 17 января 2012

В начале текста в метке есть пробел (все пробелы в HTML свернуты в один пробел), но не в начале строки, с которой вы сравниваете его.

ВашКод PHP:

<label id="label1">
<?php
echo "Text inside label1";
?>
</label>

... будет отправлен в браузер следующим образом (PHP обрезает разрыв строки после ?> для вас):

<label id="label1">
Text inside label1</label>

... который похож на

<label id="label1"> Text inside label1</label>

(обратите внимание на пробел.)

Так что это должно исправить:

<label id="label1"><?php
echo "Text inside label1";
?></label>
4 голосов
/ 17 января 2012

JavaScript не знает PHP.Там нет разницы типов или что-нибудь.Страница, которая выводится, является страницей, которая выводится.Посмотрите на разницу между статическим и PHP.

Я подозреваю, что у вас возникла проблема с пропусками вокруг текста, который вы выводите.

3 голосов
/ 17 января 2012

Проблема в том, что text содержит также разрывы строк и пробелы внутри #label.

Это работает как ожидалось:

<label id="label1"><?php
echo "Text inside label1";
?></label>

<script language="JavaScript" type="text/javascript">
  var text = document.getElementById("label1").innerHTML;

  alert(text);    // show what's in variable 'text'

  if(text == "Text inside label1")
  {
    alert("I am inside.");
  }
  else
  { 
    alert("No.");
  }

</script>
3 голосов
/ 17 января 2012

В вашем примере innerHTML содержит разрыв строки:

<label id="label1">   <-- Line break
<?php
echo "Text inside label1";
?>   <-- PHP strips this line break
</label>

Вот почему text == "Text inside label1" не совпадает. Попробуйте вместо:

<label id="label1"><?php echo "Text inside label1" ?></label>
1 голос
/ 17 января 2012

Как сказано ниже, проблема заключается в интервале новой строки. Вы можете исправить это, выполнив команду

<label id="label1"><?php
    echo "Text inside label1";
?></label>

Или вы можете просто обрезать строку с помощью jQuery.trim или добавить свой собственный прототип, такой как

String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

myString.trim();
1 голос
/ 17 января 2012

Проблема может заключаться в том, что метка содержит дополнительные пробелы и символы новой строки.Лучший подход может быть indexof:

var str = "Text inside label1";
if(str.indexOf(text) != -1)
{}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...