使用Jquery来定位PHP输出的元素


Using Jquery to target element outputted by PHP

首先显示代码。它有两页,第一页我们命名为form。php第二页我们命名为display。php


FORM.PHP

class display {
  var $host;
  var $username;
  var $password;
  var $table;
  public function display_public() {
$q = "SELECT * FROM agend_items ORDER BY created DESC LIMIT 3";
$r = mysql_query($q);
if ( $r !== false && mysql_num_rows($r) > 0 ) {
  while ( $a = mysql_fetch_assoc($r) ) {
    $date = stripslashes($a['date']);
    $bodytext = stripslashes($a['bodytext']);
    $time = stripslashes($a['time']);
    $entry_display .= <<<ENTRY_DISPLAY
   <h1>00:59</h1>
<div class="post" name="post" >
    <h2 name="date">
        $date
    </h2>
    <h3 class="time">
    $time
    </h3>
    <p id="agenda">
      $bodytext
    </p>
</div>
ENTRY_DISPLAY;
  }
} else {
  $entry_display = <<<ENTRY_DISPLAY
<h2> This Page Is Under Construction </h2>
<p>
  No entries have been made on this page. 
  Please check back soon, or click the
  link below to add an entry!
</p>
ENTRY_DISPLAY;
}
$entry_display .= <<<ADMIN_OPTION
<p class="admin_link">
  <a href="{$_SERVER['PHP_SELF']}?admin=1">Add a New Entry</a>
</p>
ADMIN_OPTION;
return $entry_display;
  }
 public function display_admin() {
return <<<ADMIN_FORM
<form action="{$_SERVER['PHP_SELF']}" method="post">
  <label for="date">Date:</label><br />
  <input name="date" id="date" type="date" maxlength="8" />
  <div class="clear"></div>
  <label for="time">Time:</label><br />
  <input name="time" id="time" type="time" maxlength="8" />
  <div class="clear"></div>
  <label for="bodytext">Body Text:</label><br />
  <textarea name="bodytext" id="bodytext"></textarea>
  <div class="clear"></div>
  <input type="submit" value="Input Agenda Item" />
</form>
<br />
<a href="display.php">Back to Home</a>
ADMIN_FORM;
  }
  public function write($p) {
    if ( $_POST['date'] )
  $date = mysql_real_escape_string($_POST['date']);
     if ( $_POST['time'] )
  $time = mysql_real_escape_string($_POST['time']);
    if ( $_POST['bodytext'])
  $bodytext = mysql_real_escape_string($_POST['bodytext']);
    if ( $date && $bodytext && $time ) {
  $created = time();
  $sql = "INSERT INTO agend_items VALUES('$date','$bodytext','$created','$time')";
  return mysql_query($sql);
    } else {
  return false;
    }
  }
  public function connect() {
    mysql_connect($this->host,$this->username,$this->password) or die("Could not     connect. "     . mysql_error());
    mysql_select_db($this->table) or die("Could not select database. " .     mysql_error());
return $this->buildDB();
  }
  private function buildDB() {
$sql = <<<MySQL_QUERY
CREATE TABLE IF NOT EXISTS agend_items (
date        VARCHAR(12),
bodytext    TEXT,
created     VARCHAR(100),
time        VARCHAR(8)
)
MySQL_QUERY;
return mysql_query($sql);
  }
}
?>

DISPLAY.PHP

$(document).ready(function(){ 
$('button').mousedown(function(){ 
if ($('h3').text() == "00:59") {
alert("Yup"); return true;}
else { alert("Nope");return false;};
});
});
 </script>
</head>
<body>
<?php
  include_once('_class/form.php');
  $obj = new form();
  $obj->host = 'localhost';
  $obj->username = '*****';
  $obj->password = '*****';
  $obj->table = 'agend_items';
  $obj->connect();
  if ( $_POST )
  $obj->write($_POST);
  echo ( $_GET['admin'] == 1 ) ? $obj->display_admin() : $obj->display_public();
?>
<?php
setlocale(LC_ALL,"hu_HU.UTF8");
echo(strftime("%Y. %B %d. %A. %X %Z"));
?>
<button>Check Work</button>

输出如下:00:59 (h1)2013-05-24 (h2)00:59 (h3)text (p)


我遇到的问题是,如果我运行jquery脚本,它将始终在h2, h3, p上返回false,这些是用$time, $date, $bodytext创建的。

如果在h1中我只是简单地告诉php h1是"00:59",代码执行完美。

如果在h3中输出的时间是00:59,并且我使用jquery来搜索,它每次都返回false,如果我搜索日期或正文也是如此。

如果搜索php变量$time, $date, $bodytext输出的文本,似乎代码每次都会失败。我不明白为什么它找不到这个。DOM元素应该都在那里,以便它查找…

可以忽略h1,插入它只是为了检查jquery脚本是否以最简单的形式工作,它确实是这样的。只有当使用从数据库

获取的信息创建元素文本时,才会这样做

试着把每个元素放在一行中,所以H2应该这样写,不换行:

<h2 name="date">$date</h2>

这可能有助于.text准确地找到日期字符串,而不会被额外的空格或行结束字符绊倒。

我还建议您使用console.log()来查看它实际看到的内容:

console.log( $('h2').text() );