如何判断一个Div是在另一个Div的右侧还是左侧?Jquery Javascript

如何判断一个Div是在另一个Div的右侧还是左侧?Jquery Javascript,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,说你有这个: <div id="1"></div><div id="2"></div><div id="3"></div> 你能用Javascript/jQuery找到id=“2”在id=“1”的右边吗?我不是专家,但不,我认为你不能 首先,你是在谈论代码中的内容还是它是如何在屏幕上显示出来的?列出的3个div实际上都会出现在他们自己的台词中。您需要使用跨距使它们保持在同一条线上。如果要查找#2之前的div,请执行以下

说你有这个:

<div id="1"></div><div id="2"></div><div id="3"></div>


你能用Javascript/jQuery找到id=“2”在id=“1”的右边吗?

我不是专家,但不,我认为你不能


首先,你是在谈论代码中的内容还是它是如何在屏幕上显示出来的?列出的3个div实际上都会出现在他们自己的台词中。您需要使用跨距使它们保持在同一条线上。

如果要查找#2之前的div,请执行以下操作:

$("#2").prev("div")

你可以得到他们的位置,如果div#i1的位置小于div#i2的位置(如果你愿意,他们的x位置)

#需要jQuery
变量d1x=$('div#i1')。位置()。左,
d2x=$('div#i2').position().左;
$('span').html((d1x
我不认为ID只能是数字。这可能有效,但不是一个好的做法


jsIDLE:

是。如何检查取决于“向右”的确切含义

您可以使用
offset
方法获取两个元素的位置:

o1 = $('#1').offset();
o2 = $('#2').offset();
现在,您可以比较
o1
o2
对象的
left
top
属性

如果“向右”表示它们相邻,而第二个div位于右侧,则必须比较两个属性:

if (o1.top == o2.top && o1.left < o2.left) ...
if (o1.left < o2.left) ...
请注意,
id
不应以数字开头。例如,使用
id=“x1”
id=“x2”
将是有效的。

我会这样做:

function is_div2_after_div1() {
  is_after = null;
  $("#parent > div").each(function(i, el) {
    if (is_after !== null) return;
    if (el.id && el.id == "div1") is_after = true;
    if (el.id && el.id == "div2") is_after = false;
  }
  return is_after;
}

你的意思是向右显示,还是向右显示,就像在下一个元素中一样?显然,他的意思是“显示”@TaylorMac你为什么问这个问题,只是为了好玩还是为了真正的目的?一个问题-你问这个问题是为了网页设计,还是这个问题是DOM完成后你需要知道的(即,为了用户交互)?这些ID是无效的。它们必须以一个字母开头,我不认为很明显他指的是显示,因为div本身就是块元素,他没有向我们提供css来证明这些元素是浮动的或内联设置的。我认为更可能的是,他只是失去了先前的元素id。你是对的。我只是说它显示在其他元素之前不,你不需要跨距来保持它们在同一条线上。例如,您可以应用样式
float:left到div,使它们并排排列。是的,请参阅此jsfiddle。prev()和next()遍历同级dom元素。如果这是您的问题的解决方案,则不要忘记标记为“答案”,这将只决定它们在dom中的顺序,这并不一定意味着它们按该顺序显示。@guffa,这是正确的,但我在注释中向op确认了他正在寻找的内容。否则,你的回答太棒了。@Guffa我认为他字面上是指彼此的左边或右边——从图形的意义上说。英雄联盟
function is_div2_after_div1() {
  is_after = null;
  $("#parent > div").each(function(i, el) {
    if (is_after !== null) return;
    if (el.id && el.id == "div1") is_after = true;
    if (el.id && el.id == "div2") is_after = false;
  }
  return is_after;
}