これはかなり単純なはずですが、何かが足りないようです。私が書いているコードがドキュメント全体でいくつかのことを行うことを目的とした小さなプロジェクトに取り組んでいます。スクリプトのアクションを適用する HTML コードは次のとおりです。
<div class="entry">
<p>First paragraph</p>
<p>Second paragraph</p>
<p>Third paragraph</p>
<p>One more...</p>
<div class="bttn"><a href="#">Click for More</a></div>
</div>
このテンプレート (つまり、いくつかのp要素とクラス "entry" を持つラッパーdiv内のクラス "bttn" を持つ1 つのdiv ) は、ドキュメント全体で複数回繰り返されます。ユーザーは段落にコンテンツを追加し、最終的にそれをサイトに公開します。そして、これが私の.jsファイルでやりたいことです:
- クラス "entry" を持つdiv要素内のすべてのp要素をカウントします。
- ドキュメント全体を通して、各divクラスの「エントリ」内に2 つ以上のp要素がある場合、最初の 2 つをそのままにして、残りをクラス「スライダー」の新しいdiv要素に移動します。この新しい要素は、[Click for More] ボタンの後に配置されます。
- クラス「show」を「bttn」クラスの既存のdiv要素に追加しますが、2 つ以上の段落を含み、クラス「slider」で新しいdivに移動されたクラス「entry」に属する要素にのみ追加します。新しいボタンは次のようになります。
したがって、基本的に、コンテンツを公開したユーザーが HTML テンプレートに 3 つ以上の段落を追加した場合、ドキュメントの準備ができたら、スクリプトで他の段落を取得し、それらを新しいdiv要素に移動し、新しいクラスをボタン。最後に、「Click for More」ボタンをクリックすると、後で削除されて挿入された余分な段落がうまくフェードインします (再挿入したら、ボタンの下に隠しておくためです)。これまでに行ったことは次のとおりです。
$('.entry').each(function () {
$counter = $('.entry p').length;
if ($counter > 2) {
$removeExtra = $(this).find('p').not(':eq(1)').not(':eq(0)').detach();
$(this).find('.bttn').after(function () {
return '<div class="slider">' + $removeExtra.html() + '</div>';
}).addClass('show');
}
});
問題:
- html()メソッドが一致した要素の最初のセットのみを返すことは誰もが知っているので、ボタンをクリックすると、各クラスの「エントリ」から削除された最初の段落のみが取得され、分離されたすべての段落を取得する必要があります。変数 $removeExtra に格納されます。
- クラス「bttn」を持つすべてのdiv要素は、新しいクラス「show」を取得しています。これは、余分な段落が削除されたクラス「entry」に属する要素にのみ発生するようにしたいと考えています。最初から 2 つの段落を持っていた div class="entry" 要素は、ボタンのクラスで変更されていないはずです。
これについて何か助けていただければ幸いです。前もって感謝します!