あなたはすでに答えを受け入れているようですが、私はこれを代替案として提供すると思いました:
$('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によって提起されたコメントに応えて編集されました(私が自分でお茶を作るために行ったときに私が気付いた2番目、最初はまったく考えていませんでした):
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フィドルデモ
参照: