2017-01-30 5 views
4

私は変更できないHTMLマークアップを持っています。<hr>の直後にある<hr>を削除する方法?

<p> 
    TEXT 1 
    <hr>some text 
    <hr> 
    <hr>TEXT 2 
    <hr>some text 
</p> 

私はすぐにそれらの間のテキストをせずに別のhrを次のいずれかのhrを削除したいと思います。下のスニペットからわかるように、その余分なhrは二重線を引き起こしています。

私はこれがCSSでは可能ではないと思います。私は隣接する(+)セレクタを使ってみましたが、明らかに動作しないことに気付きました。

私はjQuery :emptyを使用して調べましたが、hrは自己閉鎖しているため、ターゲットを絞るのが難しいです。

私はどんな提案もありがとうございます。

スニペット

body { 
 
    width: 500px; 
 
    margin: 0 auto; 
 
} 
 
hr { 
 
    border-top: 3px solid #CCC; 
 
    border-bottom: none; 
 
    color: #CCC 
 
} 
 
hr + hr { 
 
    /* display: none; // doesn't work */ 
 
}
<p> 
 
    TEXT 1 
 
    <hr>some text 
 
    <hr>some more text 
 
    <hr>even more text 
 
    <hr> 
 
    <hr>TEXT 2 
 
    <hr>some text 
 
    <hr>some more text 
 
    <hr>even more text 
 
</p>

+2

私は、各テキストセグメントをラップするために 'span'タグを使用することをお勧めするつもりだったが、私はあなたの質問の最初の行を逃しました。しかし、 'p'の' hr'は有効なHTMLではないので、あなたは* "変更できません" *の部分について再考したいかもしれません。 IMOでは、間違ったマークアップがブラウザ間で違って解釈される可能性があるため、一貫した解決策を得ることはまずありません。 –

+0

@JohnWeiszありがとうジョン、私はあなたの答えを削除する前に見ました。私はそれが無効であることを知らなかった。主要なブラウザで視覚的に動作するように見えます。アクセシビリティの問題ですか? – sol

+0

これは、修正するまで軽微な問題を引き起こす可能性が高いルートセマンティックの問題です。ほとんどのブラウザではレンダリング時にオンザフライで修正されますが、アクセシビリティは影響を受ける可能性のある領域の1つです。もう1つはSEOです。 –

答えて

4

を使用したいと思います、 hr + hr。そうすることで、テキストノードは今度はspanの要素であり、隣接するhr要素は隠されているので、テキストノードが考慮されます。

hr要素はp要素にネストできないため、HTMLは無効です。この例のために、p要素をdivに置き換えましたが、それでもp要素で機能し、技術的には変更する必要はありません。

$('.parent-element').contents().filter(function() { 
 
    return this.nodeType === 3 && this.textContent.trim() !== ''; 
 
}).wrap('<span/>');
hr { 
 
    border-top: 3px solid #CCC; 
 
    border-bottom: none; 
 
    color: #CCC 
 
} 
 
hr + hr { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="parent-element"> 
 
    TEXT 1 
 
    <hr>some text 
 
    <hr>some more text 
 
    <hr>even more text 
 
    <hr> 
 
    <hr>TEXT 2 
 
    <hr>some text 
 
    <hr>some more text 
 
    <hr>even more text 
 
</div>

+0

これは素晴らしいソリューションのように見えます。私はそれをテストし、返信します...ありがとう – sol

+0

ありがとう、ありがとうJosh – sol

+0

実際には、このソリューションは、私は時間を完全に隠すことができ、display:blockとborderプロパティを使ってスパンをスタイルすることができます。 :) – sol

1

あなたは:nth-child()セレクタを使用します。だから、あなたのケースでは、あなたがプログラム的span要素を持つテキストノードをラップして、あなたが提案し、最初のセレクタを使用して兄弟hr要素を隠すことができ:nth-child(even)

body { 
 
    width: 500px; 
 
    margin: 0 auto; 
 
} 
 
hr { 
 
    border-top: 3px solid #CCC; 
 
    border-bottom: none; 
 
    color: #CCC 
 
} 
 
hr:nth-child(even) { 
 
    display: none; 
 
}
<p> 
 
    TEXT 1 
 
    <hr>some text 
 
    <hr>some more text 
 
    <hr>even more text 
 
    <hr> 
 
    <hr>TEXT 2 
 
    <hr>some text 
 
    <hr>some more text 
 
    <hr>even more text 
 
</p>

+2

を使用すると、必要なhrタグも削除されます。余分な時間の位置がわかっていれば、nth-childを使用することができますが、テキストは動的に生成され、この重複は複数回発生することがあります。しかし、ありがとう – sol

関連する問題