0

可能重复:
获取 jquery 选择器的父元素

我有一个项目清单:

        <div id="wrap"><ul class="thumbs noscript">
        <li id="1">
        <a class="thumb" href="photos/10-01.jpg" title="" />
        <img src="photos/10-01_thumb.jpg" alt="" />
        </a>
        <div class="caption">
        <div class="download"><a href="#" class="add2cart">Save Image</a></div>
        <div class="image-title">Titre de la photo #1</div>
        <div class="image-desc">Description de la photo #1</div>
        </div>
        </li> /* and so on with li's and different ID's... */

我无法获取 li ID 的值,因此无法获取标题。在这里阅读并尝试了几乎所有答案,一旦我在我的网站上进行测试,它们将无法工作......知道吗?TY伙计们

$(document).ready(function(){
    $("#wrap > ul > li > .caption > .download > .add2cart").click(function(){
        var thisID = $(this).closest('li').attr("id");
        alert(thisID);
    });
});

正确答案(见下文):insomiac,tyvm 也感谢 Diodeus 指出 ID 问题。感谢所有回答的人;)

4

3 回答 3

1

使用“数据”api 存储值,然后单击检索该值而不是使用 id。

<li id="img" data-val="1">
            <a class="thumb" href="photos/10-01.jpg" title="" />
            <img src="photos/10-01_thumb.jpg" alt="" />
            </a>
            <div class="caption">
            <div class="download"><a href="#" class="add2cart">Save Image</a></div>
            <div class="image-title">Titre de la photo #1</div>
            <div class="image-desc">Description de la photo #1</div>
            </div>
    </li> /* and so on with li's and different ID's... */

jQuery:

    $(document).ready(function(){
        // if you want the value of li, using the child click.
        // Do something like this, if you want the click on "thumb".
        $('.thumb').click(function(e){
             e.preventDefault();
            var val = $(this).closest('li').data('val');
         });

     });

jsfiddle上工作

更新您的 js 代码:

$(document).ready(function(){
    $(".add2cart").click(function(e){
        e.preventDefault();
        // Use prop if your jquery version is above 1.6.. 
        var thisID = $(this).closest('li').prop("id");
        alert(thisID);
    });
});

注意:从 jQuery 1.6 开始,.attr() 方法为尚未设置的属性返回 undefined。此外,.attr() 不应用于普通对象、数组、窗口或文档。要检索和更改 DOM 属性,请使用 .prop() 方法。

于 2013-01-16T20:51:45.130 回答
0

对于您的特定情况,您可以使用$(this).parent().attr('id')

$('li a').on('click', function () {
   alert('you clicked a link within a li with id=' + $(this).parent().attr('id')); 
   } 
); 

http://jsfiddle.net/8QZ2s/

于 2013-01-16T20:49:34.763 回答
0

您也可以使用 .closest

$(this).closest('li').attr('id');

如果您的控件进一步嵌套,这将确保它实际上是在找到 li 而不是另一个父元素。

于 2013-01-16T20:51:56.410 回答