如何使用JQuery中的PREV函数访问SPAN元素?

时间:2010-01-03 23:12:39

标签: jquery html

单击按钮时,需要在其发生之前查看并找到特定的span标记。不幸的是,它要么找不到标签,要么不改变它的内容。

这是不起作用的代码。

$(this).prev("span[id*=CommentText]").hide();

我可以在加载事件期间设置颜色,但是当点击链接时它不会进行任何更改。

这只适用于加载阶段:

$("span[id*=CommentText]").css("background-Color", "red");

编辑:

<html>
<head>
    <script src="../Scripts/jquery-1.3.2-vsdoc.js" type="text/javascript"></script>
    <script src="../Scripts/jquery-1.3.2.js" type="text/javascript"></script>
    <script src="../Scripts/jquery.color.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $("textarea[id*=Comments]").hide().css("background-Color", "white");
            $("span[id*=CommentText]").css("background-Color", "red");
            $("a[id*=CommentLink]").click(LoadComments).css("background-Color", "white");
        });
        function LoadComments() {
            $(this).prev("textarea[id*=Comments]").animate({ backgroundColor: 'yellow' }, 500).show().focus();
            $(this).prev("span[id*=CommentText]").css("background-Color", "white");
            $(this).fadeOut();
        }
    </script>
</head>
<body>
     <span id="Q37CommentText">comments here</span>
     <textarea name="Q37Comments" rows="1" cols="50" id="Q37Comments">comments here</textarea>
     <a id="Q37CommentLink">Add/Edit Comment</a>

     <span id="Q40CommentText">Comment 2</span>
     <textarea name="Q40Comments" rows="1" cols="50" id="Q40Comments">Comment 2</textarea>
     <a id="Q40CommentLink">Add/Edit Comment</a>
</body>
</html>

5 个答案:

答案 0 :(得分:7)

如果你的标记结构总是一样的话,我会倾向于保持简单并与

一起使用
$(this).prev().prev() ...

其他替代方案正在使用prevAll()

$(this).prevAll('span:first'); // may or may not need the attribute filter depending
                            // on if there are more <span> elements as siblings

导航到父级,然后调用find()

$(this).parent().find('span[id*=CommentText]');

附注:

只需查看您的标记,使用CSS类可能更容易,而不是使用ID和属性过滤器来选择基于以x开头,结尾或包含{{1}}的ID的元素。在所有/几乎所有浏览器中(特别是那些实现document.getElementsByClassName(classNames)Selectors API

),可能更快

答案 1 :(得分:1)

.prev()的问题在于根据文档:

  

只有前一个兄弟姐妹   退回,而不是以前的所有   兄弟姐妹。

您可能必须使用prevAll("span[id*='CommentText']")(未经测试)。

http://docs.jquery.com/Traversing/prevAll

答案 2 :(得分:1)

试试这个:

$(this).parent().find("span[id*=CommentText]").hide();

编辑:您可能需要也可能不需要子选择器>。由于我使用ASP.NET,我必须经常使用它 编辑:是的,你不需要子选择器,所以我把它删除了。

答案 3 :(得分:0)

试试这个$("span[id*='CommentText']")

答案 4 :(得分:0)

您是否尝试过使用.live事件绑定click事件?绑定到click事件仅适用于尚未动态添加的元素。

http://docs.jquery.com/Events/live