在子集中按属性值查找元素

时间:2011-11-18 06:34:39

标签: jquery jquery-selectors

我必须根据当前图像路径找到下一张图像。这是一些定制的灯箱和jquery 1.3.2。我的HTML:

<div id="feat_screenshots">
    <a class="lightbox" href="/images/features/1.gif"><img title="Image 1" alt="Image 1" src="/images/features/1.gif"></a>
    <a class="lightbox" href="/images/features/2.gif"><img title="Image 2" alt="Image 2" src="/images/features/2.gif"></a>
    <a class="lightbox" href="/images/features/3.gif"><img title="Image 3" alt="Image 3" src="/images/features/3.gif"></a>
</div>

和我的javascript:

$(document).ready(function(){
    $("a.lightbox").click(function(){
        var img_src = $(this).attr("href");
        getNextImage(img_src);
    });
}

function getNextImage(curPath)
{
    var $picset = $("a.lightbox");
    alert($($picset).find("img[src=\'/images/features/1.gif\']").attr("title"));
    alert($($picset).find("img[src$=\'/images/features/1.gif\']").attr("title"));
    alert($($picset).find("img[src=curPath]").attr("title"));
    alert($($picset).find("img[src$=curPath]").attr("title"));
/*
    to be continued...
*/
}

我只想弄清楚哪些有效,哪些无效。我在这里使用.attr(“title”)仅用于调试以测试我找到的图片。

如果我将'/images/features/1.gif'传递给getNextImage(),则只有第二个警报返回正确的标题;所有其他人都回归'未定义'。

所以我的问题是:在这里使用我的变量curPath获取元素的正确语法是什么?我没有尝试过任何工作。

4 个答案:

答案 0 :(得分:2)

curPath是一个变量,因此您需要将其连接到选择器

$($picset).find("img[src='" + curPath + "']").attr("title")

答案 1 :(得分:1)

curPath是变量???

所以试试这个。

alert($($ picset).find(“img [src =”+ cuePath +“]”)。attr(“title”));

答案 2 :(得分:0)

只需使用

$(document).ready(function(){
    $("a.lightbox").click(function(){
        var img_src = $(this).find('img').attr('src');
    });
}

以及getNextImage仅适用于第一个元素的事物

你设置

 var $picset = $("a.lightbox");

这始终是你的第一个

 <a>

如果你真的想传递给另一个功能,你可以这样做

 getNextImage($(this),img_src);

然后在函数中获取它

function getNextImage(current_anchor,curPath)
{
    var img_src = $(current_anchor).find("img[src='" + curPath + "']").attr("title");

}

答案 3 :(得分:0)

不能直接回答您的问题,但如果您真正想要的是获取下一个a标记,为什么不使用next()函数?

$("a.lightbox").click(function(){
    var nextImage = $(this).next();
});