首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Javascript :在列表中查找特定的前一个元素并添加类

在JavaScript中,如果你想在列表(例如一个HTML的<ul><ol>元素中的多个<li>元素)中查找特定的前一个元素并给它添加一个类,你可以使用DOM遍历方法来实现。以下是一个基本的示例,展示了如何做到这一点:

代码语言:txt
复制
// 假设我们有以下HTML结构
/*
<ul id="myList">
  <li>Item 1</li>
  <li>Item 2</li>
  <li class="target">Item 3</li>
  <li>Item 4</li>
</ul>
*/

// 获取目标元素
const targetElement = document.querySelector('.target');

// 检查目标元素是否有前一个兄弟元素
if (targetElement.previousElementSibling) {
  // 获取前一个兄弟元素
  const previousSibling = targetElement.previousElementSibling;
  
  // 给前一个兄弟元素添加类
  previousSibling.classList.add('new-class');
}

在这个例子中,我们首先通过querySelector方法找到了具有target类的元素。然后,我们检查这个元素是否有前一个兄弟元素,如果有,我们就给它添加一个新的类new-class

优势

  • 使用原生JavaScript DOM API,不需要额外的库。
  • 代码简洁,易于理解和维护。

类型

  • 这是一种DOM操作,属于前端开发的范畴。

应用场景

  • 当你需要根据某个特定元素来修改其周围元素的样式或行为时。
  • 在构建交互式用户界面时,例如高亮显示当前选中项的前一个选项。

遇到的问题及解决方法: 如果你发现目标元素没有前一个兄弟元素,或者你想要处理更复杂的情况(比如目标元素是列表的第一个元素),你可以使用循环或者条件判断来遍历列表元素,直到找到目标元素的前一个兄弟元素。

代码语言:txt
复制
// 获取列表元素
const list = document.getElementById('myList');
const items = list.getElementsByTagName('li');

// 遍历列表项
for (let i = 0; i < items.length; i++) {
  if (items[i].classList.contains('target')) {
    // 如果找到目标元素,给前一个兄弟元素添加类
    if (i > 0) {
      items[i - 1].classList.add('new-class');
    }
    break;
  }
}

在这个改进的例子中,我们遍历了所有的列表项,并在找到目标元素时给它的前一个兄弟元素添加了类。如果目标元素是列表的第一个元素,这段代码不会执行添加类的操作,因为i > 0的条件不成立。

参考链接:

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

相关·内容

排序数组查找元素一个和最后一个位置

排序数组查找元素一个和最后一个位置 给你一个按照非递减顺序排列整数数组 nums,和一个目标值 target。请你找出给定目标值在数组开始位置和结束位置。...如果数组不存在目标值 target,返回 [-1, -1]。 你必须设计实现时间复杂度为 O(log n) 算法解决此问题。...二、题目解析 注意只要数据中国可以找到具有二段性,即可适用二分查找算法!!! 我们将这道题拆解成两个部分,第一部分就是求该元素左端点,另一部分就是求该元素右端点。...其实这两部分是大同小异,只要弄懂其中一个,另一个就迎刃而解! 我们首先来讲第一部分——求该元素左端点。 第一步将这些数据分为两个部分:小于元素和大于等于该元素这两个部分。...第二步就是普通二分算法代码 注意这里有一个细节,跟普通二分查找算法不同,也是后面细节“万恶之源”。

10010

排序数组查找元素一个和最后一个位置

排序数组查找元素一个和最后一个位置 给定一个按照升序排列整数数组 nums,和一个目标值 target。找出给定目标值在数组开始位置和结束位置。...如果数组不存在目标值 target,返回 [-1, -1]。 进阶:你可以设计实现时间复杂度为 O(log n) 算法解决此问题吗?...刚刚接触二分搜索同学不建议上来就像如果用一个二分来查找左右边界,很容易把自己绕进去,建议扎扎实实写两个二分分别找左边界和右边界 寻找右边界 先来寻找右边界,至于二分查找,如果看过704.二分查找就会知道...nums 数组中二分查找得到第一个大于等于 target下标(左边界)与第一个大于target下标(右边界); # 2、如果左边界<= 右边界,则返回 [左边界, 右边界]。...nums 数组中二分查找得到第一个大于等于 target下标leftBorder; # 2、 nums 数组中二分查找得到第一个大于等于 target+1下标, 减1则得到rightBorder;

4.7K20
  • 问与答87: 如何根据列表内容文件夹查找图片复制到另一个文件夹

    Q:如何实现根据列表内容查找文件夹照片,并将照片剪切或复制到另外文件夹?如下图1所示,列C中有一系列身份证号。 ?...图1 一个文件夹(示例为“照片库”),存放着以身份证号命名照片,在其中查找上图1所示工作表列C身份证号对应照片并将其移动至另一文件夹(示例为“一班照片”),如下图2所示。 ?...图2 如果文件夹找不到照片,则在图1工作表列D中标识“无”,否则标识有,结果如下图3所示,表明文件夹“照片库”只找到复制了2张照片,其他照片没有找到。 ?...,然后遍历工作表单元格,并将单元格值与数组值相比较,如果相同,则表明找到了照片,将其复制到指定文件夹,根据是否找到照片在相应单元格输入“有”“无”以提示查找情况。...可以根据实际情况,修改代码照片所在文件夹路径和指定要复制文件夹路径,也可以将路径直接放置工作表单元格使用代码调用,这样更灵活。

    2.8K20

    LeetCode题目34:排序数组查找元素一个和最后一个位置

    原题描述 + 给定一个按照升序排列整数数组 nums,和一个目标值 target。找出给定目标值在数组开始位置和结束位置。 你算法时间复杂度必须是 O(log n) 级别。...如果数组不存在目标值,返回 [-1, -1]。...普通二分查找找到target后立即返回,所以我们需要做变式,情况分为以下两种。 寻找左边界 还是得举个例子。...因为lower左边不是target,而higher也一直尽可能往左挪动。 寻找右边界 与上面过程相反,我们尽可能向右挪动lower,让其与higher相撞即可。...这样调用两次二分查找逻辑,就可以完成题目。实现时,为了能重用二分查找逻辑,可以增加一个参数来控制寻找左边界还是右边界。

    3.1K20

    排序数组查找元素一个和最后一个位置

    前言 今天主要讲解内容是:如何在已排序数组查找元素一个和最后一个位置。以 leetcode 34 题作为例题,提供二分查找解题思路,供大家参考。...所以可以通过二分查找方法来解答此题; 如何查找元素一个位置?...同查找元素一个位置类似,查找到数组元素值等于目标值 target 时,不立即返回,通过增大查找区间下边界 low (令 low = mid + 1),不断向 mid 右侧收缩,最后达到锁定右边界...查找 8 出现最后一个位置: start: 两步跟查找 8 出现一个位置一样 ?...if (nums == NULL || numsSize < 1) { return res; } /* 通过 locFlag 标志区分查找元素位置一个还是最后一个

    2.6K20

    Leetcode No.34 排序数组查找元素一个和最后一个位置

    一、题目描述 给定一个按照升序排列整数数组 nums,和一个目标值 target。找出给定目标值在数组开始位置和结束位置。 如果数组不存在目标值 target,返回 [-1, -1]。...进阶: 你可以设计实现时间复杂度为 O(log n) 算法解决此问题吗?...2、mid=(low+high)/2 3、假如low等于high,返回下标mid 4、假如nums[mid]等于target且nums[mid]比相邻左侧元素大,返回下标mid 5、当目标值小于等于...nums[mid]时,说明目标值左侧,往左侧递归查找,否则往右侧递归查找 查找最后一个位置同理,唯一不同是第4、5步 4、假如nums[mid]等于target且nums[mid]比相邻右侧元素小...,返回下标mid ​5、当目标值大于等于nums[mid]时,说明目标值右侧,往右侧递归查找,否则往左侧递归查找 三、代码 package search_range; public class Solution

    1.9K10

    leetcode34-排序数组查找元素一个和最后一个位置

    前言 今天刷题目是:排序数组查找元素一个和最后一个位置,这道题目最开始AC以后,然后做了两步优化操作,供大家参考。...题目 leetcode-34:排序数组查找元素一个和最后一个位置 分类(tag):二分查找这一 英文链接:https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array...= 8输出: [3,4] 示例 2: 输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1] 题目详解 思路 有序和数组这个两个字眼结合起来,肯定是要用到二分查找这一...; 首先就是找最左侧下标,利用二分查找首先是找到有一个值是与目标值target是相等,然后因为是找最左侧下标,所以把right=mid-1来一直往左边去逼近最左侧值; 至于找最右侧下标就是,将...-1,如果不是-1,那说明需要继续找最右边下标,如果是-1的话,那么说明数组没有target值,所以我们也不必去找最右边下标了,因为已经找过了,不存在,还费这事干嘛,最终这样优化完速度快了1ms

    2.6K30

    LeetCode-34-排序数组查找元素一个和最后一个位置

    # LeetCode-34-排序数组查找元素一个和最后一个位置 给定一个按照升序排列整数数组 nums,和一个目标值 target。找出给定目标值在数组开始位置和结束位置。...你算法时间复杂度必须是 O(log n) 级别。 如果数组不存在目标值,返回 [-1, -1]。...2、二分查找(fast): 通过判断mid位置数值,决定左右边界移动 当nums[mid]<target时,说明targetmid右方,start = mid+1 当nums[mid]>target...时,说明targetmid左方,end = mid-1 当nums[mid]==target时,说明左右边界有一个地方等于target,这时候只需要查找另外一个边界等于target即可,可以进行循环移动查找...,最后返回[start,end]即可 如果没有找到,返回[-1,-1] 方法3、递归分治(low): 通过二分查找切分数组寻找左右子数组target位置,迭代到只有一个,判断是否是目标值,返回一个都是当前

    2.2K20

    排序数组查找元素一个和最后一个位置(leetcode34)

    给定一个按照升序排列整数数组 nums,和一个目标值 target。找出给定目标值在数组开始位置和结束位置。 如果数组不存在目标值 target,返回 [-1, -1]。...示例 1: 输入:nums = [5,7,7,8,8,10], target = 8 输出:[3,4] 解析: 方法一:二分查找 二分查找,寻找leftIdx 即为在数组寻找第一个大于等于 target...下标,寻找 rightIdx 即为在数组寻找第一个大于target 下标,然后将下标减一。...两者判断条件不同,为了代码复用,我们定义 binarySearch(nums, target, lower) 表示 nums 数组中二分查找 target 位置,如果 lower 为 true,...则查找一个大于等于 target 下标,否则查找一个大于target 下标。

    1.8K10

    排序数组查找元素一个和最后一个位置--题解

    排序数组查找元素一个和最后一个位置 给定一个按照升序排列整数数组 nums,和一个目标值 target。找出给定目标值在数组开始位置和结束位置。...如果数组不存在目标值 target,返回 [-1, -1]。 进阶: 你可以设计实现时间复杂度为 O(log n) 算法解决此问题吗?...示例 3: 输入:nums = [], target = 0 输出:[-1,-1] 提示: 0 <= nums.length <= 105 -109 <= nums[i] <= 109 nums 是一个非递减数组...- 1 } else if nums[mid] == target { end = mid } else { start = mid + 1 } } //此处防止数组第一个数是...target int) int { start, end := 0, len(nums)-1 for start < end { //此处注意,为了防止 start=mid<end 导致死循环问题

    1.9K30

    LeetCode - #34 排序数组查找元素一个和最后一个位置(Top 100)

    前言 本题为 LeetCode 100 高频题 我们社区陆续会将顾毅(**Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。...如果大家有建议和意见欢迎文末留言,我们会尽力满足大家需求。 难度水平:中等 1. 描述 给定一个按照升序排列整数数组 nums,和一个目标值 target。...找出给定目标值在数组开始位置和结束位置。 如果数组不存在目标值 target,返回 [-1, -1]。 进阶: 你可以设计实现时间复杂度为 O(log n) 算法解决此问题吗? 2....输入:nums = [], target = 0 输出:[-1,-1] 约束条件: 0 <= nums.length <= 10^5 -10^9 <= nums[i] <= 10^9 nums 是一个非递减数组...时间复杂度: O(logn) 空间复杂度: O(1) 该算法题解仓库:LeetCode-Swift[2] 点击前往 LeetCode[3] 练习 特别感谢 Swift社区 编辑部每一位编辑,感谢大家辛苦付出

    1.5K20

    ​LeetCode刷题实战34:排序数组查找元素一个和最后一个位置

    今天和大家聊问题叫做在排序数组查找元素一个和最后一个位置,我们先来看题面: https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array...题意 给定一个按照升序排列整数数组 nums,和一个目标值 target。找出给定目标值在数组开始位置和结束位置。 你算法时间复杂度必须是 O(log n) 级别。...版本2:是指二分法执行完毕,返回target最左边位置,求出另一个边界! 关于详细说明,请看这篇[二分搜索](二分查找有几种写法?它们区别是什么?...bisect库 简要介绍一下, bisect.bisect_left(a,x,lo=0,hi=len(a))a找x最左边数索引,如果找不到就返回插入索引. bisect.bisect(a, x,...LeetCode刷题实战26:删除排序数组重复项 LeetCode刷题实战27:移除元素 LeetCode刷题实战28:实现 strStr() LeetCode刷题实战29:两数相除 LeetCode

    1.2K20
    领券