jQuery包裹罢工After,Append还是Regex?

时间:2011-04-29 13:18:52

标签: jquery regex append

我想通过JUST字体标签的价格字符添加一个警示标签,类别为'specialprice'。这很难,因为代码设置的方式只是获得Price而不是之前的文本:

如果我可以用'specialprice'中的所有内容包装所有内容,请事先在font.colors_text或NOT font.colors_text中填写吗?

我有这个:

<font class="pricecolor colors_productprice specialprice">
   <font class="text colors_text">
      <b>Regular Price:<br></b>
   </font>
   $2,492<sup>.38</sup>
</font>

我想要这个:

<font class="pricecolor colors_productprice specialprice">
   <font class="text colors_text">
      <b>Regular Price:<br></b>
   </font>
   <strike>$2,492<sup>.38</sup></strike>
</font>

3 个答案:

答案 0 :(得分:1)

在CSS中,为删除线添加一个类:

.strike {text-decoration: line-through;}

在你的jQuery中:

// get all the children of pricecolor, filter out the colors_text children,
// and wrap the span of price around them
$(".pricecolor").contents().each(function() {
    if(!$(this).is(".colors_text")) {
        $(this).wrap("<span class='price'>");
    }
});

$(".price").addClass("strike");

如果你的价格选择器被删除,你可能想要使用一个ID,如果页面上有很多价格,则给每个价格一个唯一的ID。

答案 1 :(得分:0)

如果我不能改变HTML,我会使用jQuery.wrap。

试试这个(虽未测试)

首先获取应该被攻击的所有部分,然后在元素上使用.wrap($("<strike></strike>"))

var list = $("span.pricecolor").children();
list.not(list.first());
list.wrap($("<strike></strike>"));

答案 2 :(得分:0)

由于浏览器访问子元素的不一致,您可以改为使用Regex:

$(".specialprice").html($(".specialprice").html().replace(/<\/font>(.*<\/sup>)/i, "</font><strike>$1</strike>"));