jQuery 下一个有特殊类型子元素的兄弟

2024-03-20

我的 HTML 有一个包含许多同级元素的容器元素div元素,每个元素包含一个contenteditable p。这些兄弟姐妹div然而,被其他人“打断”div其中不包含可编辑元素。

目前对我来说挑战的是如何“跳过”这些干扰div使用左右箭头键从 C 移动到 D 或从 D 返回到 C 时(请参阅代码片段)。遇到这些情况时导航会停止div缺少可编辑元素。我该如何纠正这个问题?

$('#foo p[contenteditable = "true"]').bind("keydown", function(e) {
  switch (e.key) {
    case "ArrowLeft":
      var $P = $(this).parent().prev().children('p[contenteditable = "true"]');
      setTimeout(() => $P.focus(), 0);
      e.stopImmediatePropagation();
      e.preventDefault();
      break;

    case "ArrowRight":
      var $P = $(this).parent().next().children('p[contenteditable = "true"]');
      setTimeout(() => $P.focus(), 0);
      e.stopImmediatePropagation();
      e.preventDefault();
      break;
  }
});
#foo p[contenteditable="true"] {
  /* font-size: 22px;*/
  height: 22px;
  width: 22px;
  color: cyan;
  font-weight: bold;
  background-color: cyan;
}

#foo p.const {
  background-color: inherit;
  border: none;
  height: 22px;
  width: 22px;
}

#foo div {
  text-align: center;
  display: inline-block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="foo">
  <div>
    <p contenteditable="true" tabindex="0"></p>
    <p>A</p>
  </div>
  <div>
    <p contenteditable="true" tabindex="1"></p>
    <p>B</p>
  </div>
  <div>
    <p contenteditable="true" tabindex="2"></p>
    <p>C</p>
  </div>
  <div>
    <p class="const">&nbsp;</p>
    <p>&nbsp;</p>
  </div>
  <div>
    <p class="const">"</p>
    <p>"</p>
  </div>
  <div>
    <p contenteditable="true" tabindex="3"></p>
    <p>D</p>
  </div>
  <div>
    <p contenteditable="true" tabindex="4"></p>
    <p>E</p>
  </div>
</div>

代替prev() or next(), use .prevAll(":has(p[contenteditable])").first() and .nextAll(":has(p[contenteditable])").first():

$('#foo p[contenteditable = "true"]').bind("keydown", function(e) {

  switch (e.key) {
    case "ArrowLeft":
      var $P = $(this).parent().prevAll(":has(p[contenteditable])").first().children('p[contenteditable = "true"]');
      setTimeout(() => $P.focus(), 0);
      e.stopImmediatePropagation();
      e.preventDefault();
      break;

    case "ArrowRight":
      var $P = $(this).parent().nextAll(":has(p[contenteditable])").first().children('p[contenteditable = "true"]');
      setTimeout(() => $P.focus(), 0);
      e.stopImmediatePropagation();
      e.preventDefault();
      break;

  }

});
#foo p[contenteditable="true"] {
  /* font-size: 22px;*/
  height: 22px;
  width: 22px;
  color: cyan;
  font-weight: bold;
  background-color: cyan;
}

#foo p.const {
  background-color: inherit;
  border: none;
  height: 22px;
  width: 22px;
}

#foo div {
  text-align: center;
  display: inline-block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="foo">

  <div>
    <p contenteditable="true" tabindex="0"></p>
    <p>A</p>
  </div>
  <div>
    <p contenteditable="true" tabindex="1"></p>
    <p>B</p>
  </div>
  <div>
    <p contenteditable="true" tabindex="2"></p>
    <p>C</p>
  </div>
  <div>
    <p class="const">&nbsp;</p>
    <p>&nbsp;
      <p>
  </div>
  <div>
    <p class="const">"</p>
    <p>"
      <p>
  </div>
  <div>
    <p contenteditable="true" tabindex="3"></p>
    <p>D</p>
  </div>
  <div>
    <p contenteditable="true" tabindex="4"></p>
    <p>E</p>
  </div>



</div>

prevAll https://api.jquery.com/prevAll//nextAll https://api.jquery.com/nextAll/匹配与选择器匹配的所有前一个/后一个同级,返回一个 jQuery 对象in order(所以最近的兄弟姐妹是第一个,然后是第二个最近的兄弟姐妹,依此类推);使用.first()然后将集合减少到最近的兄弟姐妹。

我用过:has https://api.jquery.com/has-selector/伪选择器,但你最好给相关元素一个类,因为:has是 CSS 中特定于 jQuery 的补充。在这里我使用了该类stop所以就是.xxxxAll(".stop").first():

$('#foo p[contenteditable = "true"]').bind("keydown", function(e) {

  switch (e.key) {
    case "ArrowLeft":
      var $P = $(this).parent().prevAll(".stop").first().children('p[contenteditable = "true"]');
      setTimeout(() => $P.focus(), 0);
      e.stopImmediatePropagation();
      e.preventDefault();
      break;

    case "ArrowRight":
      var $P = $(this).parent().nextAll(".stop").first().children('p[contenteditable = "true"]');
      setTimeout(() => $P.focus(), 0);
      e.stopImmediatePropagation();
      e.preventDefault();
      break;

  }

});
#foo p[contenteditable="true"] {
  /* font-size: 22px;*/
  height: 22px;
  width: 22px;
  color: cyan;
  font-weight: bold;
  background-color: cyan;
}

#foo p.const {
  background-color: inherit;
  border: none;
  height: 22px;
  width: 22px;
}

#foo div {
  text-align: center;
  display: inline-block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="foo">

  <div class="stop">
    <p contenteditable="true" tabindex="0"></p>
    <p>A</p>
  </div>
  <div class="stop">
    <p contenteditable="true" tabindex="1"></p>
    <p>B</p>
  </div>
  <div class="stop">
    <p contenteditable="true" tabindex="2"></p>
    <p>C</p>
  </div>
  <div>
    <p class="const">&nbsp;</p>
    <p>&nbsp;
      <p>
  </div>
  <div>
    <p class="const">"</p>
    <p>"
      <p>
  </div>
  <div class="stop">
    <p contenteditable="true" tabindex="3"></p>
    <p>D</p>
  </div>
  <div class="stop">
    <p contenteditable="true" tabindex="4"></p>
    <p>E</p>
  </div>



</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery 下一个有特殊类型子元素的兄弟 的相关文章

  • 函数的通用 .length 检查

    当我用 JS 或 jQuery 编写函数并且需要参数时 我使用if something length诡计 this example function e if e length blablabla else return false 但我不
  • jQuery 和 AngularJS:将事件绑定到更改的 DOM

    在 AngularJS 的 DOM 中 我在 ng repeat 指令中使用 ng include 它加载 HTML 一切正常 不管怎样 我遇到的一个问题是 我使用 JQuery 最新版本 在 DOM 中的元素上绑定一些鼠标悬停和鼠标单击事
  • 使用 fadeIn() 时,jQuery“未捕获类型错误:未定义不是函数”;

    我是 JS 新手 正在编写一个基本的富含 jQuery 的网页 其中同一文档中的每个页面都具有淡入 淡出功能 使用具有单独 ID 的相同 div 元素 无论如何 当我尝试淡入当前页面时 我收到错误 未捕获的类型错误 未定义不是函数 我在网上
  • 在选择下拉列表中选择特定选项时添加输入框

    我需要在选择选项时将输入添加到选择选项中 每当用户选择 其他 时 就会出现一个输入框供用户输入数据 HTML
  • jQuery 删除函数真的删除 Dom 元素吗?

    我真的想知道 jQuery 是否remove http api jquery com remove 函数确实从 DOM 中删除元素 首先 我看了here https stackoverflow com questions 2185760 j
  • jquery 验证最小长度规则不起作用

    我有一个带有密码字段的表单 密码长度必须至少为 8 个字符
  • IE8 上 json 解析失败

    json gt 返回的响应 msg div p Unfortunately we were unable to process your application p br Please upload a CV br div status e
  • jQuery 的 on() 支持这种 livequery 功能吗?

    使用 livequery 我可以执行以下操作 focusable livequery function this focus 我知道 jQuery 支持委托等的自定义函数 但我没有看到任何让我认为 jQuery 可以完成 livequery
  • 使用回退异步加载 jquery 核心

    通过标头中的性能优化和非阻塞脚本 我一直在尝试异步加载 jquery 本身 我遇到了一个jQuery 加载器 http www yterium net jQl an asynchronous jQuery Loader脚本 那个async加
  • 如何从 iframe 中设置 Chrome 打印对话框的默认文件名?

    我正在开发一个项目 我的部分项目是 iframe 中的仪表板 我有一个请求要提出just我正在处理的 iframe 可导出为 PDF 即 仅显示 iframe 内容 而不显示其周围的包装内容 我已经使用一些 jQuery 让它工作了 但是
  • Comet,使用 jquery 教程进行长轮询 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望通过使用 ajax 和 jquery 将 comet 长轮询功能添加到我的网站 因为我不熟悉 j
  • 添加之前检查班级是否已分配

    在 jQuery 中 是否建议在添加该类之前检查该类是否已分配给元素 它会产生任何影响吗 例如
  • jQuery 将表单提交到新选项卡?

    我有一个表单中的操作链接 需要每分钟用令牌更新一次 当用户单击提交按钮时 我从 api 调用中获取新的 url 令牌 我正在使用这样的东西
  • 一旦元素存在就触发事件的脚本?

    我正在尝试编写一个小 Greasemonkey 脚本来实现 Facebook 中的一些任务 例如隐藏新闻等 问题是 我有一个 DOM 中尚不存在的元素的 ID 这是点击帖子的箭头图标时出现的小框 如何通过 jQuery 创建一个事件处理程序
  • 在 GeoJson 数据接收到的 Google 地图多边形上放置标签

    我想将带有信息的标签 或带有标签的 div 放在由下面的代码片段绘制的多边形上 样式属性已成功应用于要素 多边形类型 有谁知道如何向该特征添加文本并将其显示在多边形的中心 function handleGeoJson data map da
  • 如何根据上一张或下一张幻灯片按键更改 Nivo Slider 中的效果?

    我想根据按下的按钮更改 Nivo Slider 上的过渡效果 关于如何实现这一目标有什么想法吗 Update澄清一下 我指的是下一个或上一个按钮 而不是键盘上的按钮 我正在寻找的是 如果一个人按下下一个按钮 则会调用 slipToRight
  • jquery load() 去除脚本标签 - 解决方法?

    有谁知道 jquery load 的解决方法 去掉从外部内容加载的脚本标签 有很多文档证明这种情况发生 但在网上搜索了大约 4 个小时后我找不到解决方法 我正在加载动态生成的 div 类似于搜索结果页面 并且需要将 click 绑定到每个动
  • 使用 Ajax 和 PHP 上传图像

    我想将图像上传到我的服务器 并控制 HTML 代码中的 PHP 回显 为此 我想使用 jQuery Ajax 但我不知道如何使用 Ajax 将图像发送到 PHP 这是一个大学项目 所以我不能使用任何类型的插件 我的实际代码 HTML
  • 获取鼠标在滚动条上的位置

    当我向下滚动或向上滚动时如何获取鼠标位置 我试过这个 document mousemove function event captureMousePosition event scroll function event xMousePos
  • 如何在 Firefox 插件上使用 jQuery 1.5.2+?

    首先 我创建了一个接收参数并返回 jQuery 的函数 例如 function getjQuery window jquery code window return window jQuery 但后来我收到了一封评论电子邮件 他们告诉我必须

随机推荐

  • 追踪 Windows 服务中的 stackoverflow 错误

    我对我的一个 Windows 服务做了一个小调整 然后运行它并得到了 描述 由于堆栈溢出 进程被终止 所以我回到旧版本并运行它 但仍然收到 stackoverflow 错误 最糟糕的是我已经调试了两者并且我没有再次出现此错误 如何 什么是找
  • 如何按比例调整WPF Listview的大小?

    我在调整 Listview 控件大小时遇到 了一些问题 我打算根据窗口的实际大小按比例调整大小 对于 Listview 的初始大小 其大小为 300 X 600 宽度 X 高度 以像素为单位 我也设置了它最大高度到 750 但其宽度保持不变
  • 如何将 jquery 样板转换为 require 样板?

    如何将 jquery 命名空间插件转换或放入 require 样板中 例如 这通常是我的标准 jquery 样板 A namepace structure function Initial setting var pluginName BR
  • 提供者 Oracle 与实体框架不支持删除数据库

    我正在使用模型优先方法和 Oracle 数据库 更新2 现已修复 关于包括seed数据 我收到此错误 提供商不支持删除数据库 UPDATE1如果我更改种子数据类型 public class MySeedData DropCreateData
  • 这意味着什么:应该显式设置“android:fullBackupContent”以避免备份 GCM 设备特定的 regId?

    这个 Lint 警告是什么意思 应显式设置 android fullBackupContent 以避免备份 GCM 设备特定的 regId 我已经用谷歌搜索但还没有找到任何东西 的一部分令人不安的 https commonsware com
  • Windows 7 OCR API

    我一直在审查 Office 2007 MODI OCR 的替代品 OneNote 2010 解决方案的质量 结果低于 2007 我注意到 一旦您安装了可选 tiff 过滤器 http technet microsoft com en us
  • 用于创建外部表的 BigQuery Node.js api

    我正在尝试使用 node js API 从 google 云函数创建外部表 该函数将从 GCS 存储桶变化触发 我可以创建本机表 但不能创建外部表 在node js api中进行导入here https googlecloudplatfor
  • 如何在 SDL 中创建颜色渐变

    SDL 没有这样的功能 很好奇过去是否有人做过并且不介意引导我走向正确的方向 我想在两种颜色之间创建渐变以反映在矩形的高度上 只需在所需的 y 位置上进行循环即可 通过在渐变的端点颜色之间进行插值来计算所需的颜色 Call SDL SetR
  • JSON解析多个key

    我有以下 JSON 字符串 var jsonString J 4 0 M J 5 0 N 如果我使用 jquery parseJSON jsonString 解析它 我得到 J 5 0 N 问题 1 jsonString是否格式错误 2 是
  • 将方法提升为 Scala 中的函数值

    Scala 库是否提供将给定类型的方法提升为函数值的支持 例如 假设我想举起String length 我可以写 val f String gt Int length or val f s String gt s length 然而 这种语
  • Python 中的视频和语音聊天可操作性

    我正在尝试寻找有关 Python 中视频和语音聊天可操作性的资源 有人知道一些好的资源或示例项目吗 任何帮助将不胜感激 如果你想要更高层次的东西你可以尝试Empathy http live gnome org Empathy 它具有 pyt
  • ElasticSearch 映射不起作用

    我正在尝试为各个字段使用不同的分析器设置 ElasticSearch 索引 但是 我似乎找不到设置特定领域分析器的方法 这是我创建 测试 索引的方法 curl XPOST localhost 9200 twitter curl XPUT h
  • 标记活动 Clear Top 会破坏目标活动而不是创建它

    我正在观察 Intent FLAG ACTIVITY CLEAR TOP 的行为 例如我有三项活动 A B C 现在流程是A gt B gt C 现在 当我使用以下代码从 C 开始使用此标志时 Intent intent to a new
  • hadoop和hbase的最新兼容版本

    我必须在4台机器上安装hadoop和hbase 我找到了最新版本hadoop 2 6 0 and hbase 0 98 9 hadoop2 bin 1 它们兼容吗 2 我应该如何在4台机器上安装hbase和hadoop 即有多少个maste
  • 组合枚举 C++

    在我的项目中 我有几个与此类似的枚举声明 enum Comparison LT lt GT gt EQ LTEQ lt GTEQ gt NEQ enum Arithmetic ADD SUB MUL DIV MOD 我想将其中的几个组合成一
  • 如何注入 jQuery 并在同一个书签中使用它?

    我可以使用以下书签成功地将 jQuery 注入到页面中 javascript void function doc if typeof jQuery undefined var script jQuery document createEle
  • Scala/Java 枚举

    我读了this https stackoverflow com questions 1321745 scala doesnt have enums what to use instead of an enum and this https
  • 将 Matplotlib 图转换为 NumPy 数组,没有任何边框/框架或轴

    我正在尝试将 Python 生成的图像与文件中的图像 照片进行比较 到目前为止 最好的方法是在 Matplotlib 中生成一个图形 然后将其转换为 numpy 数组 并将这些值与我从图像中获得的值进行比较 我得到了以下代码 将 Matpl
  • 对不完整类型的引用

    根据 C 03 标准 引用不完整类型是否有效 我不知道有任何实现将引用实现为非空指针以外的任何其他实现 因此这样的代码应该可以工作 但是 我想知道对不完整类型的引用是否符合标准 我希望得到带有引用和 C 标准参考的答案 据我所知 C 标准没
  • jQuery 下一个有特殊类型子元素的兄弟

    我的 HTML 有一个包含许多同级元素的容器元素div元素 每个元素包含一个contenteditable p 这些兄弟姐妹div然而 被其他人 打断 div其中不包含可编辑元素 目前对我来说挑战的是如何 跳过 这些干扰div使用左右箭头键