4

我有以下问题。下载了一个脚本,它正在从 div 的正文中加载所有图像。我想在此处再添加一张图像,该图像不会被脚本处理。

在代码中是这样的:

<div id="myGallery0" class="spacegallery">
<img src=ADDITIONAL.jpg alt="" atr1="1" />  
<img src=images/bw1.jpg alt="" atr1="1" />
<img src=images/bw2.jpg alt="" atr1="2" />
<img src=images/bw3.jpg alt="" atr1="3" />
</div>

所以我的问题是,如何在 jquery 中选择除“ADDITIONAL.jpg”之外的所有这些图像?

我的第二个问题是如何使用 GetElementsBy 函数之一在自然 JavaScript 中选择它。

4

4 回答 4

6

您可以使用:not()伪和:first选择器的组合:

var $images = $('#myGallery0').find('img:not(:first)');

我猜我的香草 js 解决方案与 HTML5 一起看起来像:

var images = document.getElementById('myGallery0').querySelectorAll('img');

images = Array.prototype.filter.call(images, function( node, idx ) {
    return idx > 0;
});

更新:

我也同意在这个特定的例子中,jQuery.slice(1)更性感(也更快),也就是说

var $images = $('#myGallery0 img').slice(1);

但这仅在您切割第一个项目时才有效。使用这些伪选择器,您还可以轻松删除,比如说第二个节点,比如 using img:not(:eq(1))。虽然这也是可能的.slice(),但这样做会变得更加棘手。

于 2012-04-27T09:16:08.953 回答
5

原始 JavaScript

原始 JavaScript 版本使用document.getElementById然后Element#getElementsByTagName跳过第一个:

var list, images = [], index;
list = document.getElementById("myGallery0").getElementsByTagName("img");
for (index = 1; index < list.length; ++index) {
    images.push(list[index]);
}
// Use the `images` array

开始循环index = 1跳过第一个(这将是index = 0)。

或者你可能会变得非常棘手,但我会在你的目标浏览器上彻底测试它:

var images = Array.prototype.slice.call(
    document.getElementById("myGallery0").getElementsByTagName("img"),
    1);

这是有效的,因为根据规范,必须允许它使用的对象不是数组,只要它支持方法规范中列出的操作。并且返回的确实如此,因此我们可以调用将其作为值传递并告诉它我们想要一个从索引 1 开始的切片。但请注意,规范也很清楚地表明“......该函数是否可以成功应用于主机对象是依赖于实现的。” 并且是主机提供的对象,因此建议在您的目标环境中进行彻底测试。Array.prototype.slice sliceNodeListgetElementsByTagNamesliceNodeListthissliceNodeList

jQuery

在 jQuery 中,有很多方法可以做到这一点。我最喜欢的可能是Rui 指出的那个,使用slice

var images = $("#myGallery0 img").slice(1);
于 2012-04-27T09:21:25.340 回答
4

只是另一种选择:

$('#myGallery0 img').slice(1)
于 2012-04-27T09:19:16.093 回答
0

您可以使用该slice方法获取结果的一部分:

$('#myGallery0 img').slice(1)

普通的 Javascript 版本将是类似的,有一个技巧将元素集合转换为数组:

Array.prototype.slice.call(
  document.getElementById('myGallery0').getElementsByTagName('img')
).slice(1)
于 2012-04-27T09:22:59.867 回答