如何使用JQuery替换选择器的IF?

时间:2012-10-10 01:40:43

标签: jquery jquery-selectors

我觉得我在做脏代码,虽然它工作正常......

在这种情况下,如何通过常规JQuery选择器替换那些IF语句:

见代码+ fiddler

<html>
<body>
    <a href="#b" class="cssPauseAll" historyID="12">Pause All</a><br/>

        <a href="#b" itemHistoryID="12" ContentID="45">AA</a><br/>
        <a href="#b" itemHistoryID="12" ContentID="14">BB</a><br/>
        <a href="#b" itemHistoryID="12" ContentID="78">AA</a><br/>  

    <a href="#b" class="cssPauseAll" historyID="13">Pause All</a><br/>

        <a href="#b" itemHistoryID="13" ContentID="45">BB</a><br/>
        <a href="#b" itemHistoryID="13" ContentID="14">BB</a><br/>
        <a href="#b" itemHistoryID="13" ContentID="78">CC</a><br/> 
</body>    
</html>​

$(document).ready(function () {

    $(document).on("click","a.cssPauseAll[historyID]", function () {
        var historyID = $(this).attr("historyID");
        //alert("historyID from PauseAll  " + $(this).attr("historyID"));
        $(document).find("[itemHistoryID]").each(function() {

            var itemHistoryID = $(this).attr("itemHistoryID");

            if(historyID == itemHistoryID)
            {
                alert($(this).attr("ContentID"));
            }
        });

    });

});​

Fiddler

3 个答案:

答案 0 :(得分:1)

您可以连接字符串:

$("a[itemHistoryID='" + historyID + "']");

http://jsfiddle.net/FBCBP/

请注意,无需选择文档对象并使用find方法。您可以直接使用$jQuery选择元素,并且单独使用属性选择器非常慢,您可以在属性选择器之前使用元素选择器(在本例中为 {{1 }})。

答案 1 :(得分:1)

是的,你应该能够做到这一点

$(document).ready(function () {

$(document).on("click","a.cssPauseAll[historyID]", function () {
    var historyID = $(this).attr("historyID");
    //alert("historyID from PauseAll  " + $(this).attr("historyID"));

    $(document).find("[itemHistoryID='" + historyID + "']").each(function() {
        // here only the matching itemHistoryIds will loop
        alert($(this).attr("ContentID"));
    });

});

});​

答案 2 :(得分:1)

如果您的HTML正是这样,那么您可以使用nextUntil代替each循环所有元素,您知道只有下一个a元素具有itemHistoryID等于点击链接。

$(document).on("click","a.cssPauseAll[historyID]", function () {
    var historyID = $(this).attr("historyID");

    $(this).nextUntil('a[itemHistoryID!="' + historyID + '"]', 'a').each(function() {
        alert($(this).attr('ContentID'));
    });

});

demo