0

jQuery を使用して、名前属性をレベル 2 ヘッダーに動的に割り当てようとしています。 http://jsfiddle.net/8ZTEb/

これが私のJavaScriptです:

$(function() {
    $("h2").each(function() {
        $(this).attr("name", $(this).html().toLowerCase()); 
    });
});​

これが私の長い、しかし単純な HTML です。

<a href="#bar">Bar</a>
<h2>Foo</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam eu sollicitudin urna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In tincidunt magna vel quam auctor sit amet tincidunt lacus euismod. Praesent bibendum odio nec nisl tempus dictum. Cras aliquet condimentum est luctus accumsan. Aenean lectus lacus, malesuada eu dictum eu, euismod ac purus. Aliquam ultrices egestas elit, nec scelerisque lorem suscipit in. In auctor bibendum ullamcorper. Aenean lectus arcu, fermentum sed aliquet quis, tristique vestibulum est. In nisi ligula, consequat non semper vitae, pharetra vel risus. Nulla odio augue, tincidunt quis bibendum id, ullamcorper vel eros. Proin feugiat imperdiet tellus, ut porttitor massa eleifend in. Praesent sed nisl sed dui vestibulum auctor. Maecenas viverra feugiat erat adipiscing porttitor. Aenean mattis tincidunt placerat.
</p>
<p>
Fusce aliquam, dui a facilisis porttitor, nisi dolor semper dolor, ac vestibulum elit lorem id lorem. Nam ut odio eros. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse consequat tempor volutpat. Vestibulum cursus purus et nulla dignissim suscipit. Cras convallis dolor nec dolor volutpat vel rutrum magna eleifend. Nullam eget lorem orci. Vestibulum vel aliquam ligula.
</p>
<p>
Aliquam in tellus odio, ut gravida ante. Vestibulum vitae diam elementum dui ultricies hendrerit quis vitae ante. Vestibulum vel metus metus. Nulla in nulla et risus dictum lobortis at ac ligula. Nunc in dolor id sapien facilisis porttitor id vitae magna. Integer pretium faucibus felis, vitae tristique est condimentum egestas. Suspendisse potenti. Duis auctor molestie sapien, sed vestibulum dolor ornare in. Praesent lacus purus, luctus non suscipit eget, aliquet in nunc. Etiam bibendum, erat ut blandit vehicula, augue diam vestibulum ipsum, ut imperdiet libero est sit amet tortor. Quisque gravida porttitor augue, eu hendrerit libero ullamcorper eget. Sed at tortor nisi, a luctus nunc. Curabitur in fringilla velit. Nulla elementum hendrerit ante ac faucibus. Mauris ultrices pretium erat sit amet scelerisque.
</p>
<p>
Integer dictum diam vel orci laoreet vehicula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec eu commodo dui. Quisque a diam mauris. Curabitur ornare sollicitudin ligula, in fringilla ligula porttitor et. Proin bibendum tincidunt orci, eget iaculis sem venenatis et. Integer eu eros magna, sed placerat augue. Cras eget est purus. Duis convallis gravida tempus. Curabitur a dolor ut nisl sodales rutrum. Maecenas eget diam quis turpis scelerisque mattis eget ac sapien. Sed commodo mattis tellus, sit amet tempor ligula placerat at.
</p>
<p>
Sed ornare faucibus tincidunt. Sed suscipit metus a massa feugiat dignissim. Maecenas auctor vulputate placerat. Vivamus pulvinar pharetra tincidunt. Nunc tempus ornare interdum. Vestibulum vitae magna lorem, quis luctus augue. Phasellus quam leo, dignissim vitae semper a, iaculis et lacus. Sed elit nunc, interdum sit amet dictum vitae, fermentum eget lorem. Phasellus nisi dui, varius ut lacinia et, condimentum sed tortor. Fusce eu orci et justo rutrum varius sit amet quis enim. Suspendisse id urna eget odio pellentesque lacinia in ut neque. Vestibulum ante lectus, placerat ac mattis vitae, tincidunt quis tortor. Morbi vel sem ut quam dignissim faucibus ut eu lorem. Aliquam laoreet arcu nec urna eleifend consectetur. Suspendisse potenti.
</p>
<h2>Bar</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam eu sollicitudin urna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In tincidunt magna vel quam auctor sit amet tincidunt lacus euismod. Praesent bibendum odio nec nisl tempus dictum. Cras aliquet condimentum est luctus accumsan. Aenean lectus lacus, malesuada eu dictum eu, euismod ac purus. Aliquam ultrices egestas elit, nec scelerisque lorem suscipit in. In auctor bibendum ullamcorper. Aenean lectus arcu, fermentum sed aliquet quis, tristique vestibulum est. In nisi ligula, consequat non semper vitae, pharetra vel risus. Nulla odio augue, tincidunt quis bibendum id, ullamcorper vel eros. Proin feugiat imperdiet tellus, ut porttitor massa eleifend in. Praesent sed nisl sed dui vestibulum auctor. Maecenas viverra feugiat erat adipiscing porttitor. Aenean mattis tincidunt placerat.
</p>
<p>
Fusce aliquam, dui a facilisis porttitor, nisi dolor semper dolor, ac vestibulum elit lorem id lorem. Nam ut odio eros. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse consequat tempor volutpat. Vestibulum cursus purus et nulla dignissim suscipit. Cras convallis dolor nec dolor volutpat vel rutrum magna eleifend. Nullam eget lorem orci. Vestibulum vel aliquam ligula.
</p>
<p>
Aliquam in tellus odio, ut gravida ante. Vestibulum vitae diam elementum dui ultricies hendrerit quis vitae ante. Vestibulum vel metus metus. Nulla in nulla et risus dictum lobortis at ac ligula. Nunc in dolor id sapien facilisis porttitor id vitae magna. Integer pretium faucibus felis, vitae tristique est condimentum egestas. Suspendisse potenti. Duis auctor molestie sapien, sed vestibulum dolor ornare in. Praesent lacus purus, luctus non suscipit eget, aliquet in nunc. Etiam bibendum, erat ut blandit vehicula, augue diam vestibulum ipsum, ut imperdiet libero est sit amet tortor. Quisque gravida porttitor augue, eu hendrerit libero ullamcorper eget. Sed at tortor nisi, a luctus nunc. Curabitur in fringilla velit. Nulla elementum hendrerit ante ac faucibus. Mauris ultrices pretium erat sit amet scelerisque.
</p>
<p>
Integer dictum diam vel orci laoreet vehicula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec eu commodo dui. Quisque a diam mauris. Curabitur ornare sollicitudin ligula, in fringilla ligula porttitor et. Proin bibendum tincidunt orci, eget iaculis sem venenatis et. Integer eu eros magna, sed placerat augue. Cras eget est purus. Duis convallis gravida tempus. Curabitur a dolor ut nisl sodales rutrum. Maecenas eget diam quis turpis scelerisque mattis eget ac sapien. Sed commodo mattis tellus, sit amet tempor ligula placerat at.
</p>
<p>
Sed ornare faucibus tincidunt. Sed suscipit metus a massa feugiat dignissim. Maecenas auctor vulputate placerat. Vivamus pulvinar pharetra tincidunt. Nunc tempus ornare interdum. Vestibulum vitae magna lorem, quis luctus augue. Phasellus quam leo, dignissim vitae semper a, iaculis et lacus. Sed elit nunc, interdum sit amet dictum vitae, fermentum eget lorem. Phasellus nisi dui, varius ut lacinia et, condimentum sed tortor. Fusce eu orci et justo rutrum varius sit amet quis enim. Suspendisse id urna eget odio pellentesque lacinia in ut neque. Vestibulum ante lectus, placerat ac mattis vitae, tincidunt quis tortor. Morbi vel sem ut quam dignissim faucibus ut eu lorem. Aliquam laoreet arcu nec urna eleifend consectetur. Suspendisse potenti.
</p>​

「バー」というラベルの付いたインライン アンカーをクリックしても、ページのどこにも移動しないのはなぜですか?

4

3 に答える 3

2

あなたのリンクは、「foo」ではなく「bar」という名前の要素を探しています。

<a href="#bar">Bar</a>H2が現在のようでは<h2 name="bar">Foo</h2>なく、H2があった場合、H2を見つけるでしょう。<h2 name="foo">Foo</h2>アンカーのhtmlである「バー」にしたい場合は、H2要素のhtml(foo)をH2のname属性として割り当てています。

リンクを変更する<a href="#foo">Bar</a>か、jQuery を変更できます。

更新: コードはほとんどの要素で機能するはずですが、互換性を最大限に高めるために、要素の ID と名前の値が同じであることを確認することもできます。

HTML5 標準では、アンカーの名前を指定するために name 属性の代わりに ID 属性を使用することを提案しています。ID 属性を使用すると、最新のすべてのブラウザーで HTML4 に対して機能するはずです。

参照: http://www.w3.org/TR/html401/struct/links.html#h-12.2.3およびhttp://www.w3.org/TR/html5/links.html#hyperlink

于 2012-04-25T18:26:19.673 に答える
0

代わりに、ページ上の要素の位置に基づいてスクロールしたいようです。代わりに、特定の要素のオフセットを見つけて (jQuery 経由で実行できます)、次window.scrollTo(offset)のように呼び出す必要があります。

<a href="#" class="scrollableLink">Bar</a>

$('.scrollableLink').click(function()
{
    // Some syntax might not be correct on the selector, but you get the general idea
    var offset = $('[name=' + $(this).text() + '").prop('offsetTop');

    window.scrollTo(offset);
});
于 2012-04-25T18:27:22.317 に答える
0

これ<a name=''><h2>Lorem Ipsum</h2></a>は、探している構文です。jQuery のwrap関数を使用して、正しいアンカー参照を追加します。あなたの考えをいじる

JavaScript

$(function() {
        $("h2").each(function(index,elem) {
            $(this).wrap("<a name='"+$(this).text().toLowerCase()+"'></a>"); 
        });
    });​
于 2012-04-25T18:34:55.747 に答える