在wordpress中使用javascript隐藏包含特定文本的li

如何解决在wordpress中使用javascript隐藏包含特定文本的li

我正在尝试使用 javascript 通过特定文本在 wordpress 的搜索下拉菜单中隐藏子类别。到目前为止没有运气。我不是程序员,所以我会感谢您提供指导或修复脚本的帮助。 当我检查页面时,菜单 html 看起来有点像这样(我已经缩小了范围):

<ul>
<li>
<select class="default-select select2-hidden-accessible" name="categories" tabindex="-1" aria-hidden="true">
<option value=""> choose category </option>
<option value="119">Customer Support</option>
<option value="163">Hosting</option>
<option value="181"> - Link Building</option>
</li>
</ul>

当我检查选项时,我得到了这个:

    <span class="select2-results">
    <ul class="select2-results__options" role="tree" id="select2-categories-85-results" aria-expanded="true" aria-hidden="false">
    <li class="select2-results__option" role="treeitem" aria-selected="false"> choose category </li>
    <li class="select2-results__option" id="select2-categories-85-result-5nsl-119" role="treeitem" aria-selected="false">Customer Support</li>
    <li class="select2-results__option" id="select2-categories-85-result-td3l-163" role="treeitem" aria-selected="false">Hosting</li>
    <li class="select2-results__option" id="select2-categories-85-result-c6bv-181" role="treeitem" aria-selected="false"> - Link Building</li>
    </ul></span>

我试图隐藏包含字符“-”或“--”的每个 li。 所以经过大量搜索后,我发现了这个 javascript:

let lis = document.getElementsByTagName('li');

for (let x = 0; x < lis.length; x++) {
    let li = lis[x];
    let content = li.textContent;
  
    if (content.indexOf('-') !== -1 || content.indexOf('--') !== -1) {
    li.style.display = 'none';
  }
}

问题是当我使用它时,类别菜单完全消失,类别菜单的 html 代码如下所示:

<ul>
<li style="display: none;">
<select class="default-select select2-hidden-accessible" name="categories" tabindex="-1" aria-hidden="true">
<option value=""> choose category </option>
<option value="119">Customer Support</option>
<option value="163">Hosting</option>
<option value="181"> - Link Building</option>
</li>
</ul>

我尝试过使用“getElementsByClassName('select2-results__option')”,但它完全没有做任何事情,例如菜单及其内容不受影响。 我怎样才能解决这个问题?感谢您的帮助。

编辑: 搜索部分的 HTML PHP 片段(如果有帮助):

<ul>
<li>
<div class="form-group">
<input type="text" placeholder="<?php echo __( 'What are you looking for?','exertio_theme' ); ?>" class="form-control" name="title" value="<?php echo esc_attr($title_value); ?>">
</div>
</li>
<li>
<select class="default-select" name="categories">
<option value=""> <?php echo __( 'Select Category','exertio_theme' ); ?> </option>
<?php echo get_hierarchical_terms('service-categories','',$cat_value ); ?>
</select>
</li>
<li> <button type="submit" class="btn btn-style btn-block"><?php echo __( 'Search','exertio_theme' ); ?></button> </li>
</ul>

此外,当我使用以下 css 在下拉菜单中隐藏特定的 li 时,它可以工作(如果有帮助):

.select2-results__options > li:nth-child(2) { display: none; }

解决方法

您的 HTML 有一些语法错误。你错过了一个 </select>,我解决了这个问题。 由于您有不同的 html 源代码,我不确定您使用的是哪一个。 我只取第一个 html 源。

我更新了你的 js 文件和下面的例子:

const options = document.querySelectorAll("option");

for (let i = 0; i < options.length; i++) {
  const content = options[i].textContent;
  if (content.indexOf("-") !== -1 || content.indexOf("--") !== -1) {
    options[i].style.display = "none";
  }
}

document
  .querySelector("select[name='categories']")
  .addEventListener("change",function () {
    const lis = document.querySelectorAll("span.select2-results li");

    for (let i = 0; i < lis.length; i++) {
      const content = lis[i].textContent;
      if (content.indexOf("-") !== -1 || content.indexOf("--") !== -1) {
        lis[i].style.display = "none";
      }
    }
  });
<div>
  <ul>
    <li>
      <select
        class="default-select select2-hidden-accessible"
        name="categories"
        tabindex="-1"
        aria-hidden="true"
      >
        <option value="">choose category</option>
        <option value="119">Customer Support</option>
        <option value="163">Hosting</option>
        <option value="181">- Link Building</option>
      </select>
    </li>
  </ul>
</div>
<div>
  <span class="select2-results">
    <ul
      class="select2-results__options"
      role="tree"
      id="select2-categories-85-results"
      aria-expanded="true"
      aria-hidden="false"
    >
      <li class="select2-results__option" role="treeitem" aria-selected="false">
        choose category
      </li>
      <li
        class="select2-results__option"
        id="select2-categories-85-result-5nsl-119"
        role="treeitem"
        aria-selected="false"
      >
        Customer Support
      </li>
      <li
        class="select2-results__option"
        id="select2-categories-85-result-td3l-163"
        role="treeitem"
        aria-selected="false"
      >
        Hosting
      </li>
      <li
        class="select2-results__option"
        id="select2-categories-85-result-c6bv-181"
        role="treeitem"
        aria-selected="false"
      >
        - Link Building
      </li>
    </ul></span
  >
</div>

,

设法解决了问题,感谢@ikhvjs 提供脚本并帮助我学到了很多东西。如果有人感兴趣,我会分享解决方案。

wordpress javascript 文件名:select2.full.min.js

动态生成类别项到页面的javascript如下:

    i.prototype.option=function(e){
    var t=document.createElement("li");
    t.className="select2-results__option";
    var n={role:"option","aria-selected":"false"},i=window.Element.prototype.matches||window.Element.prototype.msMatchesSelector||window.Element.prototype.webkitMatchesSelector;
    for(var r in(null!=e.element&&i.call(e.element,":disabled")||null==e.element&&e.disabled)&&(delete n["aria-selected"],n["aria-disabled"]="true"),null==e.id&&delete n["aria-selected"],null!=e._resultId&&(t.id=e._resultId),e.title&&(t.title=e.title),e.children&&(n.role="group",n["aria-label"]=e.text,delete n["aria-selected"]),n){
    var o=n[r];
    t.setAttribute(r,o)
    }
    if(e.children){
    var s=h(t),a=document.createElement("strong");
    a.className="select2-results__group";
    h(a);
    this.template(e,a);
    for(var l=[],c=0;c<e.children.length;c++){
    var u=e.children[c],d=this.option(u);
    l.push(d)
    }
    var p=h("<ul></ul>",{class:"select2-results__options select2-results__options--nested"});
    p.append(l),s.append(a),s.append(p)
    }
    else this.template(e,t);
    return f.StoreData(t,"data",e),t
    }

我只是在函数中的第一个变量声明之后添加了以下变量和 if 条件:

var content=e.text;if(window.location.href.indexOf("/services-search/")!=-1&&(content.indexOf("-")!==-1||content.indexOf("--")!==-1)){t.style.display="none";}

现在,当我在“/services-search/”页面时,包含“-”或“--”的子类别不会显示。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res