javascript - Javascript:确定最近的元素
问题描述
我正在寻找使用标签元素(红色箭头)的 TextArea 元素(金色/黄色箭头)。我使用getBoundingClientRect
api 来查找页面上每个元素的中心。
注意我正在过滤页面上的特定输入元素和文本区域以及标签元素,以将我的搜索限制为页面上的特定元素。所以我过滤的元素只包括图中标有箭头的元素。
这是我尝试过的代码
//Label (Arrow Red in picture)
label_rect = $("label[for='textarea']").getBoundingClientRect()
//Calculating Center Coordinates
label_rect_x = label_rect.x + label_rect.width / 2 // X Coordinate
label_rect_y = label_rect.y + label_rect.height / 2 // Y Coordinate
// TextArea(Arrow Gold/Yellow in picture)
txbox_rect = $("#textarea").getBoundingClientRect()
//Calculating Center Coordinates
txbox_rect_x = txbox_rect.x + txbox_rect.width / 2 // X Coordinate
txbox_rect_y = txbox_rect.y + txbox_rect.height / 2 // Y Coordinate
// Calculating Distance two centers
txbox_rect_dis = Math.sqrt(
(txbox_rect_x - label_rect_x) * (txbox_rect_x - label_rect_x) +
(txbox_rect_y - label_rect_y) * (txbox_rect_y - label_rect_y)
)
console.log(txbox_rect_dis)
//Number Box(Arrow Blue in picture)
numbox_rect = $("#in").getBoundingClientRect()
//Calculating Center Coordinates
numbox_rect_x = numbox_rect.x + numbox_rect.width / 2 // X Coordinate
numbox_rect_y = numbox_rect.y + numbox_rect.height / 2 // Y Coordinate
// Calculating Distance two centers
numbox_rect_dis = Math.sqrt(
(numbox_rect_x - label_rect_x) * (numbox_rect_x - label_rect_x) +
(numbox_rect_y - label_rect_y) * (numbox_rect_y - label_rect_y)
)
console.log(numbox_rect_dis)
这段代码似乎适用于大多数用例,但最近我注意到图片中的这些元素,最近的元素被计算为数字框(图片中的蓝色箭头)而不是 textarea(图片中的金色箭头)。我真的无法弄清楚这里出了什么问题,或者这里是否有一些基本的问题需要修复?
解决方案
所以解决方案是不添加宽度和高度来计算元素的中心。这是必要的,因为元素可能具有不同的大小,从而导致不可预测的行为
推荐阅读
- sql - 使用sql替换具有不同列名的2列之间的列
- django - django-user-accounts:没有这样的表:account_passwordhistory
- java - 两个数组通过索引“Java”彼此相等
- c++ - memset操作后array的结果为0
- php - php 读取 json 文件 - 我无法读取多层元素
- java - 位图调整大小
- javascript - Javascript从数组中获取两个最小的数字
- xpath - Xpath 从表单中提取文本
- awk - awk 或 sed 删除字段中最后一个数字后的文本
- typescript - 在无服务器配置中执行 Typescript 代码