使用 jquery 获取 php 表中元素的 .html(),其中 mysql 行被“回显” - 只从第一个表中获取元素


Using jquery to get .html() of elements in php table where mysql rows are "echoed" - only getting elements off first table

我正在创建一个基于事件的网站。为了缩短问题,我将举一个最小的例子。

我有一个活动.php页面,有一个下拉菜单,里面有每个月。下面是一组 php include,每个月都有一个,即。(1月.php日、2月.php日)。因此,当您单击下拉列表中的"一月"时,将显示 jan.php。

每个

事件都是它自己的表,每个表都有多行,尽管为了这个,我"回显"了 3 行 - 显示名称、日期、时间。

现在我的jquery给出了格式化时间和日期的预期效果(时间缩短为08:00:00而不是08:00:00.0000...等,并且对于日期,它将其从YYYY/MM/DD转换为DD/MM/YYYY。

我的问题是 - 对于每个span class="._start",当它复制class="_startplace"(格式化的日期/时间)的html时,它只会复制第一个,并将其添加到每个表(事件)上的._start中

即。表1 :鲍勃斯烧烤08:00:002015/2/12

表2 :苏茜的派对09:00:002015/2/13

3、表4等

所以每个表都有自己的span._start,我需要用相应的时间填充每个表,即表 1 的 span class="_start" 需要说 08:00:00表 2 的跨度类 ="_start" 需要说 09:00:00。目前,表 1 中的 span class="start" 显示 08:00:00,表 2 中的 span class="_start" 显示 08:00:00

关于如何解决这个问题的任何想法?我基本上正在寻找一种"绑定"格式的方法,然后"复制"到每个特定表。

每个"月".php都是这样的(注意缩短版本)

var startdate = $('._startplace').html();
    var subyear = (startdate).substr(0, 4);         
    var submonth = (startdate).substr(5, 2);
    var subday = (startdate).substr(8, 2);
    var starttime = (startdate).substr(11, 8);
var subfull = (subday + "-" + submonth + "-" + subyear);
$('._start, ._end').html(subfull + " " + starttime);

$sql = "SELECT id, date, time FROM january ORDER by date ASC, time ASC";
$result = $conn->query($sql);


if ($result->num_rows > 0) {
    echo 'Show';
     // output data of each row
     while($row = $result->fetch_assoc()) {
     echo "<table class='col-lg-12' id='event-container_'>
    <th>
    <h1 class='event-title-words'>". $row["showname"]. "</h1>
    </th>
    <tr id='event-table_'>
      <td class='column'> 
        <span class='_startplace'>" . $row["date"]. " " . $row["time"]. "</span>
           <a href='http://example.com/link-to-your-event' title='Add to Calendar' class='addthisevent' id='addevent'>
                                    Add to Calendar
                                    <span class='_start'></span>
                                    <span class='_end'></span>
             </a>
        </td>
      </tr>
</table>
 }
     echo "Done";
} else {
     echo "0 results";
}
$conn->close();
?>  

编辑:基本上,我有一个sql表中的数据通过PHP以表格式输出,每个SQL表行,创建一个新的HTML表,然后我尝试使用jquery定位HTML表中显示的输出数据的单元格,格式化该数据(即substr并使用子字符串创建新变量以从YYYY/MM/DD切换到DD/MM/YYYY), 然后将格式化的数据复制到具有"_start"类的范围中。我只能显示第一个表的"_start"中的数据,或者它显示页面上所有"_start"跨度中第 1 行(sql 行)单元格中的格式化数据。我需要每个HTML表充当1个"事件"(想想日历),并将PHP和SQL输出的日期和时间行格式化为特定格式,并复制到包含在"href"中的范围中。为什么我需要日期和时间格式的示例 https://addthisevent.com/

我的编码当然不是最好的,所以如果你注意到我"不应该"做的事情,或者知道实现我想要的效果的更简单的方法,我会很高兴听到它!干杯!

你在这里做什么:

var startdate = $('._startplace').html();

是不正确的。当你使用$('._startplace')时,你实际上得到了所有匹配的元素。然后,调用.html(),将只返回第一个元素的 HTML。

当你以后使用 $('._start, ._end').html(subfull + " " + starttime); 时,你再次拥有所有匹配的元素,但随后你正在向它写入 HTML(而不是从中读取),这意味着所有元素都会更新。

相反,您需要遍历所有元素,例如:

$('td.column').each(function(){
    var x = $(this).find('.start_place').html();
    // do stuff with x
    $(this).find('.start, .end').html(x);
});

您可以使用.each()遍历所有表格单元格。然后,对于每个单元格,.find().start_place范围,计算正确的值,然后再次.find() .start 和 .end 范围,并将正确的值写入它们。


下面是一个最小的工作示例:

$('td.column').each(function(){
    var startdate = $(this).find('._startplace').html();
    var subyear = (startdate).substr(0, 4);         
    var submonth = (startdate).substr(5, 2);
    var subday = (startdate).substr(8, 2);
    var starttime = (startdate).substr(11, 8);
    var subfull = (subday + "-" + submonth + "-" + subyear);
    $(this).find('._start, ._end').html(subfull + " " + starttime);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<table class='col-lg-12' id='event-container_'>
    <tr>
        <th>Some title</th>
    </tr>
    <tr>
      <td class='column'> 
          <span class='_startplace'>2015/02/13 17:15:00.0000</span>
          <a href='#' title='Add to Calendar' class='addthisevent'>
              Add to Calendar
              <span class='_start'></span>
              <span class='_end'></span>
          </a>
      </td>
   </tr>
    <tr>
      <td class='column'> 
          <span class='_startplace'>2015/03/05 09:30:00.0000</span>
          <a href='#' title='Add to Calendar' class='addthisevent'>
              Add to Calendar
              <span class='_start'></span>
              <span class='_end'></span>
          </a>
      </td>
   </tr>
</table>