【问题标题】:Using Javascript to change style of elements in PHP使用 Javascript 更改 PHP 中元素的样式
【发布时间】:2026-02-13 05:00:01
【问题描述】:

我对 PHP 中的 javascript 有疑问。我想使用 Javascript 函数将 ccs 属性 display 更改为 block 仅用于那些包含 php 中某些文本的 div 元素变量取自MySQL表中的列。我不知道这种方式是否真的可行,但代码如下:

PHP:

 $sql="SELECT * FROM Filter1";
  $result=$conn->query($sql);
  while($row = $result->fetch_assoc()) {
  $meno=$row['meno'];
  echo '<script type="text/javascript"> filterTovar() </script>';

JavaScript:

   function filterTovar()
  {
    var meno='<?php echo $meno; ?>'; 
    var produkt=document.getElementsByClassName("tovar");
    produkt.style.display="none";
    for(var i=0;i<produkt.length;i++)
    {
      produkt[i].style.display="none";
    }
    for(var i=0;i<produkt.length;i++)
    {
      if(produkt[i].innerHTML==meno)
      {
        produkt[i].style.display="block";
      }
    }
  }

我正在尝试制作某种过滤器,根据表格的结果只显示某些 div,但上面的代码不起作用,我不确定是否可以这样工作。

我从中获取数据的 MySQL 表:

    id      meno        znacka      cena    op      format
    425     H81M-S2V    GIGABYTE    46.03   DDR3    mATX
    426     H110N       GIGABYTE    83.05   DDR4    mITX

编辑: 更好地解释我的问题:用户使用复选框过滤我网站上的产品,在数据库中 php 创建具有相应产品的表。我上面的代码应该采用该表并使用列“meno”,其中产品名称仅显示那些包含字符串“meno”的 div。

EDIT2:我想问是否可以通过 DOMDocument() 更改或使用元素 css。如果是,它会回答我的问题。

【问题讨论】:

  • 能否将数据库结构添加到您的问题中?
  • 请提供minimal reproducible example 并更好地解释“取决于结果” 意味着什么被隐藏

标签: javascript php html css mysql


【解决方案1】:

是的,可以,但不需要使用 javascript/jQuery - 只需使用 HTML 和 CSS。

基本上,你有你的数据库结果集,你用一个while循环来循环它,对吧?

我猜你是在那个 while 循环中构造 HTML。

在循环的每次迭代中,测试您的 MySQL 列值并向所需的 HTML 元素添加一个类。

这是一个例子:

$out = '<table><tbody>';
while($row = $result->fetch_assoc()) {
    $theclass = ($row['something']=='hideme') ? ' hiddenTD' : '';
    $out .= '<tr><td class="' .$theclass. '">' .$row['something']. '</td></tr>'
}
$out = '</tbody></table>';
echo $out;

当然,您可以在文档中定义 CSS,例如:

<style>
    .hiddenTD{display:none;}
</style>

这是一个糟糕的例子,因为你不能“隐藏”一个 TD,但它是一个例子。

【讨论】:

  • 好吧,我不需要使用表,我需要更改包含该列的元素的 css。
  • 我觉得我措辞不好。我有 7 个具有相同类“tovar”的 div 元素。我在 JavaScript 中尝试做的是选择所有具有“tovar”类的元素,如果它们包含列,则在循环中逐个测试它们。如果有,将 div 的 style.display 更改为“block”,否则什么也不做。
  • 这里有一些我不明白的地方。如何获取 MySQL 结果中的 HTML 元素?您是否将一大块 HTML 存储在 MySQL 表中?所有这些 HTML 是在哪里创建的?
  • 不,我没有在任何地方存储 HTML,我手动创建了包含这些 div 元素内部的字符串的表。