虽然我看到您已经接受了答案,但我想我会提供这个作为替代方案:
$('code').each(
function(){
if (this.previousSibling == this.previousElementSibling){
$(this).addClass('block');
}
else {
$(this).addClass('inline');
}
});
JS 小提琴演示。
当然,这只会在那些实现的浏览器上运行previousElementSibling
(但我认为大多数实现 CSS 伪元素的浏览器都实现了这个功能)。
而且,在纯原生 JavaScript 中:
var codes = document.getElementsByTagName('code');
for (var i=0, len=codes.length; i<len; i++){
var cur = codes[i];
codes[i].className = cur.previousSibling == cur.previousElementSibling ? 'block' : 'inline';
}
JS 小提琴演示。
而且因为我更喜欢一种稍微整洁的方法来添加类(而不是在我添加的新类之前显式添加空格字符),所以也有这种方法:
function addClass(elem,newClass){
if (!elem) {
return false;
}
else {
var curClass = elem.className;
if (curClass.length){
return curClass + ' ' + newClass;
}
else {
return newClass;
}
}
}
var codes = document.getElementsByTagName('code');
for (var i=0, len=codes.length; i<len; i++){
var cur = codes[i];
codes[i].className = cur.previousSibling == cur.previousElementSibling ? addClass(cur,'block') : addClass(cur,'inline');
}
JS 小提琴演示。
针对 Alnitak 提出的评论进行了编辑(当我去给自己泡一杯茶时,我意识到了第二个,第一个我根本没有考虑过):
var codes = document.getElementsByTagName('code');
for (var i=0, len=codes.length; i<len; i++){
var cur = codes[i];
codes[i].className = cur.previousSibling == codes[i-1] || cur.nextSibling == codes[i+1]? addClass(cur,'block') : addClass(cur,'inline');
}
JS 小提琴演示
参考: