0

我需要从以“title-”开头的body标签中获取类名,然后将该类后缀添加到具有类“title”的H1。如果没有前缀为“title-”的类,H1 应该有类“style-default”。

“title-style1” - 这个 body 类改变了它的后缀(style1),并且也放在数组中,所以计算顺序无济于事。

<body  class="first something title-style1 last">

    <h2 class="title"> John Doe</h2>
    <!-- need to get this:-->
    <h2 class="title style1"> John Doe</h2>
    <!-- but I'mg getting  this:-->
    <h2 class="title style1 style-default"> John Doe</h2>
    <!-- this is just some other title-->
    <h2 class="style2"> John Malkovich</h2>

</body>  

我设法得到想要的后缀,但不能正确放置“样式默认”。可能是一些“if else”错误。

$(document).ready(function(){
    var classes = $("body").attr('class').split(' ');
    for (var i = 0; i < classes.length; i++) {
    // finding classes starting with title-
    var $matches = /^title\-(.+)/.exec(classes[i]);
        if ($matches != null) {
        $sufix = $matches[1];
            $(".title").addClass($sufix);      
        }
        else {
              // this also add class to every match ?
          $('.title').addClass('style-default');
        }
    }
});

这是一个小提琴 http://jsfiddle.net/lima_fil/xz9bA/60/

谢谢

4

2 回答 2

2

您正在if-else为每一类 body 标签运行该语句。所以,除非<body>标签只有一个类,否则你总会找到一些不是title-*.

您应该修改代码,以便style-default仅在for循环之后添加类。像这样的东西:

var found = false;
for (var i = 0; i < classes.length; i++) {
    // finding classes starting with title-
    var $matches = /^title\-(.+)/.exec(classes[i]);
    if ($matches != null) {
        $sufix = $matches[1];
        $(".title").addClass($sufix);

        found = true;
        break;
    }
}

if (!found) {
    $('.title').addClass('style-default');
}

另外,请记住,以开头的变量$通常表示 jQuery 对象。(也许你混淆了 PHP 和 JS?)

于 2013-04-28T10:32:29.133 回答
0

你可以用 css 得到相同的结果

<style>
body.style-style1 h1 {
    color: white;
}
body.style-style2 h1 {
    color: red;
}
</style>
于 2013-04-28T10:25:49.777 回答