2010-01-28 59 views
1

我有一个列出超过100个项目的页面,我需要动态地将name =“”标记添加到以下一个字母开头的每个新项目的开头。在动态内容页面中动态添加名称定位标记

例如:

<a name="a"></a> 
<h1>Amazon River</h1> 

<h1>Arrow Heads</h1> 

<a name="b"></a> 
<h1>Bear Claws</h1> 

<h1>Bee Traps</h1> 

<h1>Dodge Ball</h1> 

<a name="f"></a> 
<h1>Football Players</h1> 

<h1>Fig Newtons</h1> 

.... 

<a name="y"></a> 
<h1>Yorktown</h1> 

<h1>Yikes</h1> 

<a name="z"></a> 
<h1>Zebra</h1> 

<h1>Zoo Mobile</h1> 

我只熟悉瓦特/ PHP的,有点熟悉瓦特/ JavaScript的,不知道它会采取什么样的一个做到这一点。

我会打字了理论上的“代码”,所以你有什么我要完成

$letter = range(a-z); 

if($title == first_letter_character($letter)) { 
    print '<a name="'.$letter.'"></a>'; 
    $letter++; // goes to next letter in range 
} 

此外,可能有一些字母可能没有一个项目的想法。

任何帮助表示赞赏。

+1

片段将跳转到任何'name' *或*'id'。所以,你不需要插入名为'a'的元素。我认为他们是混乱的。 – Gordon 2010-01-28 23:20:01

回答

1

这是一个很难打电话的问题 - <a name="D"></a>没有在文档中添加大量语义信息,所以我很想用Javascript完成它,并保持基本标记清洁。然而,由此产生的功能yoursite.com/directory#D应该没有JS的功能,所以使用JS来启用它似乎是一个糟糕的选择。最后,我会通过PHP在标记中包含标记,这是我怀疑时的默认设置。

我假设你有这样的事情,打印出您的项目

<?php 
$items = array(......); // populated via database? 

foreach ($items as $item) { 
    echo '<a href="<?= $item->url ?>"><?= htmlentities($item->name) ?></a> 
} 
?> 

我将作出以下修改

<?php 
$items = array(......); // populated via database? 

$last_letter = 0; 

foreach ($items as $item) { 
    $letter = strtoupper($item->name[0]); // capitalized first letter 
    if ($letter != $last_letter) { 
    // not the same letter as last item 
    echo '<a name="', $letter, '"></a>'; // <a name="A"></a> 
    $last_letter = $letter; 
    } 

    echo '<a href="', $item->url, '">', htmlentities($item->name), '</a>'; 
} 
?> 
1

这是在PHP,而名单肯定更好地输出这样的事情正在生成。这样就保证了现有的和可用的客户端。 Javascript插入会起作用,但如果客户端被禁用,你无法解决这个问题。

这就是说,这里是如何在Javascript中使用mootools(jQuery会被构造成类似的)。假设H1标签页面上唯一的,我们必须做的“a”插入时,你会怎么做:

var lastletter = null, firstletter, a; 
$$('h1').each(function(el) { 
    firstletter = el.get('text').substr(0,1).toUpperCase(); 
    if (firstletter != lastletter) { 
     a = new Element('a', { 'name': firstletter }).inject(el, 'before'); 
    } 
}); 

在伪代码:抓住所有H1元素。循环播放结果并提取每个h1文本内容的第一个字母的大写副本。如果这个字母与最后一个字母不一样,那么创建一个'a'元素,设置它的名字参数,并在我们正在检查的h1之前立即将它插入到dom中。