使用.each与nearest()

时间:2012-03-05 17:38:11

标签: jquery each

我正在尝试遍历表单中的一堆字段,需要更改链接文本。

我想要的结果是

Alert("Second 1");
Alert("Second 2");

示例代码:

<div class="text-wrapper">
    <input class="field-text" value="">
</div>
<div>
    <ul>
        <li><a href="" class="first">First</li>
        <li><a href="" class="second">Second 1</li>
    </ul>
</div>
<div class="text-wrapper">
    <input class="field-text" value="">
</div>
<div>
    <ul>
        <li><a href="" class="first">First</li>
        <li><a href="" class="second">Second 2</li>
    </ul>
</div>

<script>
jQuery(document).ready(function() {
        jQuery(".text-wrapper").each(function(){
            var value = jQuery(this).closest("a.second").text();
            alert(value);
        });
});
</script>

4 个答案:

答案 0 :(得分:4)

closest找到与选择器匹配的父级,而不是子级。

您想要find

编辑:find无效,因为您要查找的代码不是text-wrapper的子代。您需要手动遍历DOM以查找元素。

jQuery(this).next('div').find("a.second").text();

答案 1 :(得分:2)

closest()从节点本身开始向上遍历DOM树,然后是parentNode,parentNode的parentNode,依此类推。 您正在寻找的函数是find(),它搜索给定节点的后代。

编辑完整性:

由于a.second不是.text-wrapper的后代,您首先必须调用next(),它返回.text-wrapper的下一个兄弟,即包含{{的div元素1}}。

a.second

答案 2 :(得分:0)

完整的jsFiddle工作解决方案,包括控制台日志中显示的两个链接:http://jsfiddle.net/3rH63/

答案 3 :(得分:0)

这应该按照您提供的测试用例工作。在尝试使用以下代码之前,您尚未正确关闭标记:

$("div:odd").each(function(){
    var value = $(this).find("a.second").html();
    alert(value);
});

小提琴链接:http://jsfiddle.net/harshithjv/2ePn9/1/