简体   繁体   English

如何使用jQuery将类添加到元素的特定同级中?

[英]How to add class to a specific siblings of element using jquery?

I want to find if an element has class lesson_read then add a class found to .course_section that comes just above it. 我想查找某个元素是否具有class lesson_read然后将found的类添加.course_section上方的.course_section中。 but don't add class to .course_section which comes below it. 但不要将类添加到其下面的.course_section中。 here is the html 这是HTML

<table class="table">               
    <tbody>
        <tr class="course_section "><!-- this should have class "found" -->
            <td colspan="4">Introduction to AEM</td>
        </tr>
        <tr class="course_lesson lesson_read">
            <td class="curriculum-icon"><i class="icon-play"></i></td>
            <td><a href="#">Introduction to AEM</a></td>
            <td> </td>
            <td><span class="time"><i class="fa fa-clock-o"></i> 00:00:00</span></td>
        </tr>
        <tr class="course_lesson lesson_read">
            <td class="curriculum-icon"><i class="icon-play"></i></td>
            <td><a href="#">Installing AEM</a></td>
            <td> </td>
            <td><span class="time"><i class="fa fa-clock-o"></i> 00:00:00</span></td>
        </tr>
        <tr class="course_lesson">
            <td class="curriculum-icon"><i class="icon-task"></i></td>
            <td>AEM Installation Quiz</td>
            <td> </td>
            <td><span class="time"><i class="fa fa-clock-o"></i> Unlimited</span></td>
        </tr>
        <tr class="course_section">
            <td colspan="4">AEM Environment</td>
        </tr>
        <tr class="course_lesson">
            <td class="curriculum-icon"><i class="icon-text-document"></i></td>
            <td>AEM Instances</td>
            <td> </td>
            <td><span class="time"><i class="fa fa-clock-o"></i> 00:00:00</span></td>
        </tr>
        <tr class="course_lesson">
            <td class="curriculum-icon"><i class="icon-play"></i></td>
            <td>Developer Tools</td>
            <td> </td>
            <td><span class="time"><i class="fa fa-clock-o"></i> 00:00:00</span></td>
        </tr>
    </tbody>
</table>

I have tried this 我已经试过了

jQuery('.course_section').each(function() {
    var c='';
    jQuery(this).siblings().each(function() {
        if(jQuery(this).hasClass('lesson_read')){
            c='found';      
        }      
    });
    if(c=='found'){
        jQuery(this).addClass(c);   
    }
});

However this adds class found to every course section. 但是,这会将found课程添加到每个课程部分。

You need to use .prev() that select preceding sibling of element. 您需要使用.prev()选择元素的先前同级。

$(".lesson_read").prev(".course_section").addClass("found");

 $(".lesson_read").prev(".course_section").addClass("found"); 
 .found {color:red} 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table class="table"> <tbody> <tr class="course_section"><!-- this should have class "found" --> <td colspan="4">Introduction to AEM</td> </tr> <tr class="course_lesson lesson_read"> <td class="curriculum-icon"><i class="icon-play"></i></td> <td><a href="#">Introduction to AEM</a></td> <td> </td> <td><span class="time"><i class="fa fa-clock-o"></i> 00:00:00</span></td> </tr> <tr class="course_lesson lesson_read"> <td class="curriculum-icon"><i class="icon-play"></i></td> <td><a href="#">Installing AEM</a></td> <td> </td> <td><span class="time"><i class="fa fa-clock-o"></i> 00:00:00</span></td> </tr> <tr class="course_lesson"> <td class="curriculum-icon"><i class="icon-task"></i></td> <td>AEM Installation Quiz</td> <td> </td> <td><span class="time"><i class="fa fa-clock-o"></i> Unlimited</span></td> </tr> <tr class="course_section"> <td colspan="4">AEM Environment</td> </tr> <tr class="course_lesson"> <td class="curriculum-icon"><i class="icon-text-document"></i></td> <td>AEM Instances</td> <td> </td> <td><span class="time"><i class="fa fa-clock-o"></i> 00:00:00</span></td> </tr> <tr class="course_lesson"> <td class="curriculum-icon"><i class="icon-play"></i></td> <td>Developer Tools</td> <td> </td> <td><span class="time"><i class="fa fa-clock-o"></i> 00:00:00</span></td> </tr> </tbody></table> 

You have to use prevAll() to get all previous siblings which have class course_section then have to use .last() to get last previous siblings(course_section) of lesson_read class 您必须使用prevAll()来获取所有具有course_section类的先前兄弟姐妹,然后必须使用.last()来获取lesson_read类的上一个先前兄弟姐妹(course_section)

 $('.lesson_read').prevAll('.course_section').last().addClass('found'); 
 .found{ color:red} 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table class="table"> <tbody> <tr class="course_section "><!-- this should have class "found" --> <td colspan="4">Introduction to AEM</td> </tr> <tr class="course_lesson"> <td class="curriculum-icon"><i class="icon-play"></i></td> <td><a href="#">Introduction to AEM</a></td> <td> </td> <td><span class="time"><i class="fa fa-clock-o"></i> 00:00:00</span></td> </tr> <tr class="course_lesson lesson_read"> <td class="curriculum-icon"><i class="icon-play"></i></td> <td><a href="#">Installing AEM</a></td> <td> </td> <td><span class="time"><i class="fa fa-clock-o"></i> 00:00:00</span></td> </tr> <tr class="course_lesson"> <td class="curriculum-icon"><i class="icon-task"></i></td> <td>AEM Installation Quiz</td> <td> </td> <td><span class="time"><i class="fa fa-clock-o"></i> Unlimited</span></td> </tr> <tr class="course_section"> <td colspan="4">AEM Environment</td> </tr> <tr class="course_lesson"> <td class="curriculum-icon"><i class="icon-text-document"></i></td> <td>AEM Instances</td> <td> </td> <td><span class="time"><i class="fa fa-clock-o"></i> 00:00:00</span></td> </tr> <tr class="course_lesson"> <td class="curriculum-icon"><i class="icon-play"></i></td> <td>Developer Tools</td> <td> </td> <td><span class="time"><i class="fa fa-clock-o"></i> 00:00:00</span></td> </tr> </tbody> </table> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM