【问题标题】:Jquery eq selector not working on class [closed]Jquery eq选择器不适用于类[关闭]
【发布时间】:2015-12-01 18:08:07
【问题描述】:

首先,我已经在这里对 stackoverflow 进行了大量调查,但没有运气。应该很简单...我将.ocurrencia_busqueda 类动态添加到很多跨度中。如果我这样做 $('.ocurrencia_busqueda').length 它会返回 64 次。但是当尝试获取每个发生的偏移量时,我总是得到相同的值,无论是从控制台尝试代码还是在脚本中硬编码:

JS

$('.ocurrencia_busqueda:eq(0)').offset()
Object { top=-434.79998779296875,  left=566.75}
$('.ocurrencia_busqueda:eq(1)').offset()
Object { top=-434.79998779296875,  left=566.75}
$('.ocurrencia_busqueda:eq(2)').offset()
Object { top=-434.79998779296875,  left=566.75}

我已经尝试使用

获取偏移量
$('.ocurrencia_busqueda').eq(N) 

而不是

$('.ocurrencia_busqueda:eq(N)')

运气不好。

应该返回偏移量的函数是:

var offset = 0;
function busca_texto() {    
    var divPosition = $('.ocurrencia_busqueda').eq(parseInt(mioffset)).offset();                        
    console.log(divPosition);
    $('html, body').animate({scrollTop: divPosition.top}, "slow");    
    mioffset++;
}

跨度就像 HTML

<span style="color:red" class="ocurrencia_busqueda" onclick="javascript:console.log($(this).offset());">TEXT</span>

当点击元素时,onclick 事件会为每个元素提供不同的偏移量。每次调用 busca_texto() 函数时,变量 mioffset 都会增加,并且应该返回下一次出现的偏移量,但它总是返回相同的,无论是在变量增加时没有问题。

我做错了什么?

【问题讨论】:

  • 请发布一个完整的代码示例。
  • 如果你想获取每个元素的偏移量,为什么不直接使用 $().each() 呢?
  • eq(x) 没有损坏。 Example using your class。为了让我们为您提供帮助,您必须生成一个 MCVE,最好使用网站上的 Stack Snippets(&lt;&gt; 按钮)。
  • 我需要从一个函数中访问它们,该函数使用一个变量作为要插入eq() 的数字。我编辑了我的帖子以添加功能
  • 如果它与 .each 使用相同的选择器一起工作,我不相信你很遗憾,因为除非它们实际上都具有相同的偏移量,否则这是不可能的。

标签: javascript jquery html offset


【解决方案1】:

通常是下面的工作检查现场示例:

console.log( $('.ocurrencia_busqueda:eq(0)').offset() );
console.log( $('.ocurrencia_busqueda:eq(1)').offset() );
console.log( $('.ocurrencia_busqueda:eq(2)').offset() );

//Object {top: 8, left: 8}
//Object {top: 8, left: 60.875}
//Object {top: 8, left: 113.75}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span style="color:red" class="ocurrencia_busqueda" onclick="javascript:console.log($(this).offset());">TEXT1</span>

<span style="color:red" class="ocurrencia_busqueda" onclick="javascript:console.log($(this).offset());">TEXT2</span>

<span style="color:red" class="ocurrencia_busqueda" onclick="javascript:console.log($(this).offset());">TEXT3</span>

使用each()函数尝试一下:

$('.ocurrencia_busqueda').each(function(index){
    console.log( $('.ocurrencia_busqueda:eq('+index+')').offset() );
})

//Object {top: 8, left: 8}
//Object {top: 8, left: 60.875}
//Object {top: 8, left: 113.75}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span style="color:red" class="ocurrencia_busqueda" onclick="javascript:console.log($(this).offset());">TEXT1</span>

<span style="color:red" class="ocurrencia_busqueda" onclick="javascript:console.log($(this).offset());">TEXT2</span>

<span style="color:red" class="ocurrencia_busqueda" onclick="javascript:console.log($(this).offset());">TEXT3</span>

【讨论】:

  • 我想说最可能的原因是 OP 的代码有效。所以这个问题目前无法有用地回答,只是猜测。与其发布猜测,不如等到问题得到有效回答。
  • 谢谢,each() 似乎可以工作,但由于性能问题,我每次都需要访问一个特定的类,而不是遍历每个人,这就是为什么我想用 @ 来做987654327@
  • 不客气,兄弟,它在小提琴和现场示例中工作,我不确定为什么不适合你的情况,尝试将你的代码放在可能有帮助的准备好的函数中。
【解决方案2】:

您添加到 span 元素中的 .ocurrencia_busqueda 类似乎存在问题。检查该类是否将position:absolute 声明为属性。当所有 span 元素的偏移量相同时,这是我能想到的唯一情况。

这是一个显示您可能面临的问题的示例:

http://jsfiddle.net/ywhjLn7j/

【讨论】:

  • 没有解释就投反对票?
猜你喜欢
  • 2015-02-11
  • 2016-05-05
  • 2017-05-13
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多