为什么我的锚标签不能正常工作?

时间:2013-03-26 16:36:35

标签: php html anchor tableofcontents

所以我继续回答我自己的问题并创建了一个TOC,它有效,它吐出我想要的一切,接受锚标签不起作用。它不会跳到页面到适当的h1-6标签所在的位置。

我有以下php:

public function table_of_contents(&$content, $HeaderParameter){
    //Creat Empty variables
    $HeaderNums = "";
    $ContentLink = "";
    $IndentLast = 1;
    //Creates a single string of header identifier. eg: "1234"
    foreach($HeaderParameter as $Num){
        $HeaderNums.= $Num;
    }
    //Setup header to search for our headers specified by user
    if (preg_match_all('/<h(['.$HeaderNums.'])(.*?)>(.*?)(<\/h['.$HeaderNums.']>)/', $content, $Result)){
        // Start Table
        $ContentLink.="<ul id='TB_UL'>";
        // Go through each result and add to our list
        foreach ($Result[0] as $key => $title){
            //Get header text
            $HeaderText = strip_tags($Result[0][$key]);
            // If user assign an ID then get it so that we can add our on
            $TagIdRegexOutput = split('"',$Result[2][$key]);
            // Check if user has already set an id, if so use theres
            if($TagIdRegexOutput[0]){
                $TagRef = $TagIdRegexOutput[1];
            }
            else{
                $TagRef = $HeaderText;
            }
            //Set a level.
            $IndentPosCurrent = $Result[1][$key];
            //Create link to header
            $ContentLink.='<li class="TB_Level' . $Result[1][$key] .'"><a class="TB_Link" href="#'.$TagRef.'">'.$HeaderText.'</a>'.'</li>';
            // Create header tag
            $HeaderTag = "h".$Result[1][$key];
            // Replace header in content with our assign id
            $content = str_replace($Result[0][$key], "<$HeaderTag"." id='$TagRef' ".">$HeaderText</$HeaderTag>", $content);
        }
        // End List
        $ContentLink.="</ul> <!-- TB_Main-->";
    }
    echo $ContentLink;      
}

这就像这样吐出html:

<ul id="TB_UL">
    <li class="TB_Level1"><a class="TB_Link" href="#Test">Test</a></li>
    <li class="TB_Level2"><a class="TB_Link" href="#More Test">More Test</a></li>
</ul>

#Test和#More测试是:<h1>Test</h1><h2>More Test</h2>

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

将锚标记添加到HTML中的正确位置或使用id s:

锚:

<h1><a name="Test">Test</a></h1>

ID:

<h1 id="Test">Test</h1>

编辑:我建议使用第二种方法,因为我认为name属性不再适用于HTML5中的锚标记:http://www.w3.org/html/wg/drafts/html/master/obsolete.html#obsolete-but-conforming-features(感谢@Alohci提供以下链接)。另一方面,如果你必须在真正的旧浏览器上支持很多用户,那么第一个用户就更好了。

答案 1 :(得分:-1)

# - 链接转到锚标记:

<a name="Test">Anchor</a>
<a href="#Test">Go to Anchor</a>

您的输出中没有任何内容。