0

我正在使用 jQuery 选择所有以某个前缀开头的锚标记,然后为每个标记调用一个函数:

$('a[id^="lblMyLabel"]').each(function() {
        doSomething(this.id);
});

在 doSomething 内部,我进行了 ajax 调用以获取一些数据。我假设 jQuery 会从上到下扫描页面,抓取所有以 lblMyLabel 开头的锚标记并按该顺序对它们进行操作,但顺序似乎是随机的。有谁知道这个选择是如何发生的?

编辑:所以我同意你们可以从上到下挑选项目。但是,如果我在响应 ajax 调用的 WebMethod 上设置一个断点,则不会按该顺序获取 ID。该顺序是如何确定的?

4

3 回答 3

4

在这种情况下,在现代浏览器中,jQuery 使用

document.querySelectorAll('a[id^="lblMyLabel"]')

允许浏览器完成工作。

在除 .prev 之类的方法之外的所有情况下,jquery 会按照元素在文档中出现的顺序返回元素。

https://developer.mozilla.org/en-US/docs/DOM/Document.querySelectorAll

于 2012-12-17T18:10:37.433 回答
2

像这样创建的 jQuery 对象中的 DOM 元素的顺序(以及因此.each()被调用的顺序)在文档中从上到下是连续的,但是如果您同时执行一堆 ajax 调用,则来自那些的响应无法保证 ajax 调用以任何特定顺序进行,因为这取决于服务器上每个响应的处理时间。

如果您想按顺序处理 ajax 响应,那么您可能需要为它们中的每一个提供某种序列标识符,将它们全部排队,并且仅在您已经处理过之前的项目 N 之后才处理项目 N。最简单的方法是根据原始序列号将所有结果排列在一个数组中,然后在所有结果完成后按顺序处理所有结果。有更复杂的方法可以在之前的所有 N 到达并被处理后立即处理 N 。

于 2012-12-17T18:12:20.820 回答
0

选择 CSS id 时需要使用 # 字符,如下例所示:

var messagePara = $('#message');

于 2012-12-17T18:19:40.840 回答