javascript - 如何唯一标识循环生成的列表元素(li)的HTML内容?

标签 javascript php css html

我通过将一个列表元素放入 php 循环中自动生成一个无序列表,如下所示:

while($row = $result->fetch_assoc()) {
echo "<a href=\"ArticleViewPage.php\" class=\"list-group-item col-sm\">". $row["Header"]."</a> ";
} 

$conn->close();

假设表中有 10 行(表 xyz 包含 2 列:id、标题),您可以从数据库中提取“id”和“标题”,其中标题在 html 页面中显示为列表,如下所示导航栏(或菜单)。

当有人点击列表元素之一并根据他们的选择执行一些代码时,我如何唯一地识别(查找 id)?

(例如:当有人单击其中一个列表项时,我需要能够将所选列表项的 id 发送到另一个 php 页面,并执行一些针对该特定 id/索引自定义的代码。)

注意:每个列表项的索引/id 无法手动输入,因为列表是使用循环生成的,该循环从数据库中提取标题以填充每个列表项,如上面所示。

请不要给出基于Jquery或其他框架的解决方案。请只提供简单简洁的 php 或 javascript 代码。

最佳答案

Javascript 解决方案:

您应该将点击事件附加到类list-group-item的每个元素,使用getElementsByClassName(),这将返回具有给定类名的所有对象的数组,以便您可以使用 for 循环遍历它们中的每个并将其与您想要在单击时触发的函数关联(在我的示例中,该函数称为 my_function),请检查下面的示例:

function my_function() {
     //get the index of clicked li
};

var class_names= document.getElementsByClassName("list-group-item");

for (var i = 0; i < class_names.length; i++) {
    class_names[i].addEventListener('click', my_function, false);
}

我建议添加名为 index 的数据属性,就像评论中提到的 @dandavis 一样,您的代码将是:

$i=0;
while($row = $result->fetch_assoc()) {
    echo "<a data-index='".$i."' href='ArticleViewPage.php' class='list-group-item col-sm'>". $row["Header"]."</a> ";
    $i++;
} 

您可以使用 getAttribute() 获取函数中的索引:

function my_function() {
     var current_item_index = this.getAttribute('data-index');
};

希望这有帮助。

关于javascript - 如何唯一标识循环生成的列表元素(li)的HTML内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35327891/

相关文章:

php - apache 和 php 500 错误噩梦

html - 初学者 html/css : Why does my webpage distort when I comment out the universal borders?

html - 将 Fixed div 设置为父容器的 100% 宽度

javascript - JQuery:.on 处理程序未附加到动态添加的元素

javascript - Epson TM-T20II 打印机无法通过 javascript sdk 打印

javascript - 如何删除 :hover from element when suddenly browser window lost focus?

javascript - Swiper slider - 为不同尺寸的屏幕设置响应图像

php - IIS 网站 "failed to open stream: No such file or directory in C:\inetpub\vhosts\"但那里存在文件

php - 删除与 Laravel 5.7 模式匹配的 Redis 键

html - 使用包装 div 进行反增量