听起来有点傻。假设我有这样一段代码,但我不知道类名,因为它们是用户在wordpress中生成的。
<ul>
<li class="A"></li>
<li class="A"></li>
<li class="A"></li>
<li class="bla"></li>
<li class="bla"></li>
<li class="bla"></li>
<li class="bla"></li>
<li class="foo"></li>
<li class="foo"></li>
<li class="foo"></li>
<li class="foo"></li>
<li class="foo"></li>
我需要这个:
<ul>
<li class="A first"></li>
<li class="A"></li>
<li class="A"></li>
<li class="bla first"></li>
<li class="bla"></li>
<li class="bla"></li>
<li class="bla"></li>
<li class="foo first"></li>
<li class="foo"></li>
<li class="foo"></li>
<li class="foo"></li>
<li class="foo"></li>
是否有任何方法/想法来处理这个在javascript或php?
特定的wordpress循环是这样的:
<?php
add_filter('posts_orderby','raufrunter');
$args = array(
'post_type' => 'preistraeger',
'meta_key' => 'wpcf-preiskategorie',
'meta_query' => array( array( 'key' => 'wpcf-preiskategorie', ), array( 'key' => 'wpcf-sortiername', ) )
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
remove_filter('posts_orderby','raufrunter');
?>
<?php
$preisclass = types_render_field( "preiskategorie", array() );
$faul = array(" ", ".", "ä", "ü", "ö");
$preisclass = str_replace($faul, "", $preisclass);
?>
<!-- here I need the extra classnam if it’s repeating itself. -->
<span class="li <?php echo $preisclass;?>">
<h6><?php echo types_render_field( "preiskategorie", array( ) );?></h6>
<?php the_title( sprintf( '<a href="%s">', esc_url( get_permalink() ) ), '</a>' ); ?>
</span>
<?php
endwhile;
?>
如果您将标识符附加到ul
,您可以使用JS这样做:
let ul = document.querySelector('ul.user-list');
Array.from(ul.querySelectorAll('li'))
.map(element => element.className.split(/'s+/))
.reduce((a, b) => a.concat(b))
.filter((elem, pos, arr) => arr.indexOf(elem) == pos)
.forEach(className => ul.querySelector('li.' + className).classList.add('first'));
.A,
.bla,
.foo {
color: lightcoral;
}
.A.first,
.bla.first,
.foo.first {
color: lightblue;
}
<ul class="user-list">
<li class="A">A 1</li>
<li class="A">A 2</li>
<li class="A">A 3</li>
<li class="bla">bla 1</li>
<li class="bla">bla 2</li>
<li class="bla">bla 3</li>
<li class="bla">bla 4</li>
<li class="foo">foo 1</li>
<li class="foo">foo 2</li>
<li class="foo">foo 3</li>
<li class="foo">foo 4</li>
<li class="foo">foo 5</li>
</ul>
ES5版本
如果你没有使用es6,这里是es5等效的JavaScript代码:
var ul = document.querySelector('ul.user-list');
[].slice.call(ul.querySelectorAll('li'))
.map(function (element) {
return element.className.split(/'s+/);
})
.reduce(function (a, b) {
return a.concat(b);
})
.filter(function (elem, pos, arr) {
return arr.indexOf(elem) == pos;
})
.forEach(function (className) {
ul.querySelector('li.' + className).classList.add('first');
});
function sort(){
var arr = [];
$("ul").children("li").each(function(){
liClass = $(this).attr("class");
inarray = $.inArray(liClass, arr)
if (inarray == -1){
$(this).addClass("first");
arr.push(liClass);
}
});
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li class="A">33</li>
<li class="A">22</li>
<li class="A">11</li>
<li class="bla">22</li>
<li class="bla">33</li>
<li class="bla">44</li>
<li class="bla">55</li>
<li class="foo">66</li>
<li class="foo">33</li>
<li class="foo">66</li>
<li class="foo">55</li>
<li class="foo">11</li>
</ul>
<button onClick="sort()">sort</button>
给你