如何在html内容中替换两个class属性?

时间:2017-09-19 01:52:42

标签: javascript jquery html css

在我的项目中,我使用ajax从DB获取html内容,这些内容将显示在id为timeTagDiv的div中的web中。

如果我的名字是约翰,那么它应该出现:

NULL

如果我的名字是雪,它应该出现:

                                                17:05:31 John translatetomaintanceGroup
                                                                         letMnGrpmakeit

 17:05:53 snow acceptSheet
 17:06:04 snow translatetoleadGrp
 leadercheckit

这是我的ajax代码:

17:05:31 John translatetomaintanceGroup
letMnGrpmakeit     

                                                             17:05:53 snow acceptSheet
                                                      17:06:04 snow translatetoleadGrp
                                                                         leadercheckit

以下是来自DB的data.stPrc的内容:

var stChr="John";
var stTrnStr="translateto";
$.ajax({
        ......
        success:function(data) 
        { 
         var $myHtml = $(data.stPrc);
         $myHtml.find("label").filter(function(){
             return $(this).text()===stChr;
             }).parent().attr("class", "rightd");
         //$myHtml.find('div:contains('+stChr+' '+stTrnStr+')').next().attr('class','rightd');
         $('#timeTagDiv').html($myHtml);
        }
    });

当label的上下文为John时,parent div的属性类更改为rightd。以下是成功运行的代码:

<div class="leftd">
 <label>17:05:31</label>&nbsp;
 <label>John</label>
 <label>&nbsp;translateto</label>
 <label>maintanceGroup</label>
</div>
<div class="leftd">
  <div class="speech left" >letMnGrpmakeit</div>
</div>
<div class="leftd"><label>17:05:53</label>&nbsp;
  <label>snow</label>
  <label>&nbsp;acceptSheet</label>
</div>
 <div class="leftd">
 <label>17:06:04</label>&nbsp;
 <label>snow</label>
 <label>&nbsp;translateto</label>
 <label>leadGrp</label>
</div>
<div class="leftd">
 <div class="speech left" >leadercheckit</div>
</div>

然后,letMnGrpmakeit的内容属于John应该在右侧。所以接下来的两个div类应该设置为class =“rightd”和class =“speech right”。

在我的例子中,之前:

$myHtml.find("label").filter(function(){
             return $(this).text()===stChr;
             }).parent().attr("class", "rightd");

替换后:

<div class="leftd">
  <div class="speech left" >letMnGrpmakeit</div>
</div>

我用:

<div class="rightd">
  <div class="speech right" >letMnGrpmakeit</div>
</div>

但不幸的是,他们都失败了。

我尝试了一个条件:

$myHtml.find('div:contains('+stChr+' '+stTrnStr+')').next().attr('class','rightd');
$myHtml.find('div:contains('+stChr+' '+stTrnStr+')').next().next().attr('class','speech right');

它有效,但看起来像是:

$myHtml.find('label:contains('+stTrnStr+')').parent().next().attr('class','rightd');
“leadercheckit”应该在“17:06:04 snow translatetoleadGrp”下,因为它属于雪。

我对此一无所知。改变两个div类的关键是两个条件。

谁能帮帮我?

2 个答案:

答案 0 :(得分:0)

由于措辞和语法,我不确定我是否理解正确,但我建议改用addClass('className')removeClass('className')。这样,如果您的元素有多个类,它将只删除所需的类。通过使用.attr('class', 'className'),您将替换所有内容。如果您想添加多个类,请使用.addClass('class-1 class-2')

答案 1 :(得分:0)

使用这些:

$myHtml.find('label:contains('+stChr+')').next('label:contains('+stTrnStr+')').parent().next().attr('class','rightd');

$myHtml.find('label:contains('+stChr+')').next('label:contains('+stTrnStr+')').parent().next().children("div").eq(0).attr('class','speech right');