0

ニュースページを作成しています。記事にアンカーが設定されているかどうかを確認する必要があります。そうでない場合は、最新の記事を表示します。アンカー付きのURLの例は次のとおりです:example.com/news.php#article43

HTML構造は次のとおりです。

<div>
  <a name="article43"></a>
  <h2>TITLE</h2>
  <div class="news_content"></div>
</div>

そして私のJSはこれです:

 var anchor = $(location).attr('href').split('#');
        if(anchor[1]){
            $('a[name=' + anchor[1] + ']').next('.news_content').show();
        }else{
            $('.news_content').first().show();
        }

何かが機能しません。

4

5 に答える 5

2

next要素の直後の兄弟のみを返します。おそらく次のようにしますnextAll

$('a[name=' + anchor[1] + ']').nextAll('.news_content').show();

または、HTML構造に折り返しが含まれていない場合、つまり次のようになります。

<div>
  <a name="article43"></a>
  <h2>TITLE</h2>
  <div class="news_content"></a>
  <a name="article44"></a>
  <h2>TITLE</h2>
  <div class="news_content"></a>
</div>

必要なもの:http://jsfiddle.net/AVg3y/

$('a[name=' + anchor[1] + ']').nextAll('.news_content').first().show();

また、これはおそらく単なるタイプミスですが、HTMLの形式が正しくありません。そのはず:

<div>
      <a name="article43"></a>
      <h2>TITLE</h2>
      <div class="news_content"></div> //<-- oops
</div>
于 2013-01-21T22:47:56.833 に答える
1

これを試してください(次の代わりに兄弟を使用してください):

var anchor = location.href.split('#');

if(anchor[1]) {
    $('a[name=' + anchor[1] + ']').siblings('.news_content').show();
} else {
    $('.news_content').first().show();
}
于 2013-01-21T22:40:12.063 に答える
0

を見てハッシュを取得できますwindow.location.hash。、を使用して、値のsubstring(1)以降のすべてを返します。#window.location.hash

if(window.location.hash) {
    $('a[name=' + window.location.hash.substring(1) + ']').next('.news_content').show();
} else {
    $('.news_content').first().show();
}
于 2013-01-21T22:39:42.363 に答える
0

私は問題を解決しました。

最初に:多くの人が言ったように、私はnextAll()を使用する必要がありました。

2番目:jQueryにCSSを含めました(JSが有効になっている場合にのみ使用されます)。$(document).ready関数の前にこれを含める必要がありました。それ以外の場合は、news_content要素をdisplay:noneに設定していました

私を助けようとしたすべての人に感謝します。

于 2013-01-21T23:35:14.690 に答える
-1

すべての回答にはハッシュの同様のバリエーションがありますが、ハッシュに一致する要素があるかどうかを確認するものはありません。

要素が条件の一部として存在することを確認することをお勧めします。

var contentToDisplay=$('.news_content').first();
if(anchor[1]){
   var $link=  $('a[name="' + anchor[1] + '"]');
   contentToDisplay= $link.length ?  $link.next().next('.news_content') : contentToDisplay;

}
contentToDisplay.show()
于 2013-01-21T23:02:38.713 に答える