首页
学习
活动
专区
圈层
工具
发布

关闭父div和ul on click,共享另一个click容器,但保持不需要的li打开

,可以通过以下步骤实现:

  1. 首先,给父div和ul元素添加一个点击事件监听器。当点击父div或ul时,触发该事件。
  2. 在事件处理程序中,使用JavaScript代码来控制需要打开和关闭的li元素。
  3. 首先,关闭所有不需要的li元素。可以通过遍历所有li元素,并将其样式设置为"display: none;"来实现。
  4. 然后,打开需要的li元素。可以通过添加一个特定的类名或样式来显示需要打开的li元素。
  5. 最后,将点击事件传递给另一个click容器。可以通过调用该容器的点击事件处理程序来实现。

下面是一个示例代码:

代码语言:txt
复制
<!DOCTYPE html>
<html>
<head>
  <style>
    .hidden {
      display: none;
    }
  </style>
</head>
<body>
  <div id="parentDiv">
    <ul id="list">
      <li>Item 1</li>
      <li>Item 2</li>
      <li>Item 3</li>
    </ul>
  </div>
  
  <div id="clickContainer">
    <button id="clickButton">Click Me</button>
  </div>

  <script>
    // 获取父div和ul元素
    var parentDiv = document.getElementById("parentDiv");
    var list = document.getElementById("list");

    // 给父div和ul元素添加点击事件监听器
    parentDiv.addEventListener("click", function() {
      // 关闭所有不需要的li元素
      var liElements = list.getElementsByTagName("li");
      for (var i = 0; i < liElements.length; i++) {
        liElements[i].classList.add("hidden");
      }
      
      // 打开需要的li元素
      // 这里假设需要打开第一个li元素
      liElements[0].classList.remove("hidden");
    });

    // 获取click容器和按钮元素
    var clickContainer = document.getElementById("clickContainer");
    var clickButton = document.getElementById("clickButton");

    // 将点击事件传递给另一个click容器
    parentDiv.addEventListener("click", function(event) {
      clickButton.click();
    });
  </script>
</body>
</html>

在上述示例代码中,当点击父div或ul元素时,会关闭所有不需要的li元素,并打开需要的li元素。然后,通过调用按钮的点击事件来传递点击事件给另一个click容器。

请注意,这只是一个示例代码,具体实现方式可能因具体情况而异。根据实际需求,你可以根据自己的项目要求进行相应的修改和调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

前端-日常笔记(个人使用)

@click.stop阻止父组件的事件发生打开菜单是click.stop的经典应用。原理:在父子标签中如果同时存在点击事件首先会只执行子组件中的事件然后执行父组件的事件。...应用场景:在点击input输入框的时候展示菜单,点击其他部分则关闭菜单。那么在点击菜单部分的时候也算在input框外部,但是此时不能关闭菜单所以要防止关闭菜单。...注意只对父组件起作用不对其他祖先组件起作用代码实例: div class="schMsg" @click="toggleMenu" @click.stop>...li v-for="(item, index) in tmpoptions" :key="index"> div @click.stop...div> div>父级点击函数:toggleMenu(打开菜单)子集点击函数:toggleSubMenu,点击组织toggleMenu发生并且执行toggleSubMenu

26500
  • 面试官:什么是js中的事件流以及事件模型?

    ) 看一下执行情况 可以看到我们在点击btn3时冒泡执行至btn2后就进行了终止 七、事件流模型的应用 事件委托 又叫 事件代理,指的是利用事件冒泡原理,只需给外层父容器添加事件...,若内层子元素有点击事件,则会冒泡到父容器上,这就是事件委托,简单说就是:子元素委托它们的父级代为执行事件。...举个例子: ul> li>1li> li>2li> li>3li> li>4li> li>5li> ul> 我们现在有一个这样的列表...,我想监听所有的li>标签,li>标签我这里只列了五个,但实际业务中这里有可能会循环出成千上万个li>标签。...动态监听:使用事件委托可以自动绑定动态添加的元素,即新增的节点不需要主动添加也可以一样具有和其他元素一样的事件。

    2.2K10

    深入理解 DOM 事件机制

    1.优点 减少内存消耗,提高性能 假设有一个列表,列表之中有大量的列表项,我们需要在点击每个列表项的时候响应一个事件 // 例4 ul id="list"> li>item 1li> li>item nli> ul> 如果给每个列表项一一都绑定一个函数,那对于内存消耗是非常大的,效率上需要消耗很多性能。...借助事件代理,我们只需要给父容器ul绑定方法即可,这样不管点击的是哪一个后代元素,都会根据冒泡传播的传递机制,把容器的click行为触发,然后把对应的方法执行,根据事件源,我们可以知道点击的是谁,从而完成不同的事...2.如何实现 接下来我们来实现上例中父层元素 #list 下的 li 元素的事件委托到它的父层元素上: // 给父层元素绑定事件 document.getElementById('list').addEventListener...,不仅body绑定事件不会触发,与此同时按钮的另一个点击事件也不触发。

    3K50

    jQuery 事件注册、事件处理

    事件委派的定义就是,把原来加给子元素身上的事件绑定在父元素身上,就是把事件委派给父元素 $('ul').on('click', 'li', function() {   alert('hello...是绑定在ul 身上的,但是 触发的对象是 ul 里面的小li // $("ul li").click(); $("ul").on("click", "li...案例:发布微博案例 1.点击发布按钮, 动态创建一个小li,放入文本框的内容和删除按钮, 并且添加到ul 中。2.点击的删除按钮,可以删除当前的微博留言。 ​...代码实现 $(function () { // 1.点击发布按钮, 动态创建一个小li,放入文本框的内容和删除按钮, 并且添加到ul 中 $...div身上的点击事件 $("ul").off("click", "li"); // 2. one() 但是它只能触发事件一次

    4.5K20

    C1能力认证训练题解析 _ 第四部分 _ Web进阶「建议收藏」

    获取元素节点信息常用属性: 名称 描述 innerHTML 返回元素内包含的所有HTML内容(文本和标签),类型为字符串 parentNode 返回指定节点的父节点 children 返回指定元素的子元素节点集合...(2)获取ul中的第2个li元素,请补全横线处数字。...> 答案:parentNode 观察元素结构可知,div元素为span元素的父级的父级,使用parentNode即可返回指定节点的父节点,父级的父级即为 .parentNode.parentNode...(2)在ul中的最后一个li元素后添加一个新的li元素,li元素文字内容为input元素的输入值,请补全横线处代码(依次填写答案,使用中文逗号「,」隔开) ul> ul> li>石家庄li> li>秦皇岛li> li>伊拉克li> li>哈尔滨li> ul> var item =

    2.4K20

    事件高级

    常情况下terget 和 this是一致的, 但有一种情况不同,那就是在事件冒泡时(父子元素有相同事件,单击子元素,父元素的事件处理函数也会被触发执行), 这时候this指向的是父元素,因为它是绑定事件的元素对象...('div');        div.addEventListener('click', function(e) {            // e.target 和 this指向的都是div            ...   ul>        li>abcli>        li>abcli>        li>abcli>    ul>            ...以上案例:给ul注册点击事件,然后利用事件对象的target来找到当前点击的li ,因为点击li,事件会冒泡到ul上, ul有注册事件,就会触发事件监听器。...li>    ul>            // 事件委托的核心原理:给父节点添加侦听器, 利用事件冒泡影响每一个子节点        var ul = document.querySelector

    1.7K20

    jQuery 事件(三) 事件的绑定和解绑、对象的使用、自定义事件

    ul> 上述ul有N个子元素li,如果需要响应每一个li的事件,那么常规的方法就是需要给所有的li都单独绑定一个事件监听,写法符合逻辑,但繁琐。...因为li都有一个共同的父元素,而且所有的事件都是一致的,这里我们可以采用要一个技巧来处理,也是常说的”事件委托” 事件没直接和li元素发生关系,而且绑定父元素了。...由于浏览器事件冒泡特性,可以在触发li时把这个事件往上冒泡到ul上,因为ul上绑定事件响应,所以能触发这个动作。 事件对象 怎么才知道触发的li元素是哪个一个?...div> div> //多事件绑定一 $("ul").on('click',function...DOM元素 冒泡前的当前触发事件的DOM对象, 等同于this. this和event.target的区别: js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事件的目标

    4.5K30

    javascript事件流的原理

    div> 上面这段html代码中,单击了页面中的 元素, 在冒泡型事件流中click事件传播顺序为 —》—》—》document 在捕获型事件流中click事件传播顺序为...事件代理的原理用到的就是事件冒泡和目标元素,把事件处理器添加到父元素,等待子元素事件冒泡,并且父元素能够通过target(IE为srcElement)判断是哪个子元素,从而做相应处理。...传统事件处理,为每个元素添加事件处理器,代码如下: View Code 事件代理的处理方式,代码如下: ul id="color-list"> li>redli> li>orange...li> li>yellowli> li>greenli> li>blueli> li>indigoli> li>purpleli> ul> (function...如果新增其他子元素(a,span,div等),直接修改事件代理的事件处理函数即可,不需要重新绑定处理器,不需要再次循环遍历。

    1.2K10
    领券