1

それで、私は自分の質問に答えて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 Test は次のとおりです<h1>Test</h1><h2>More Test</h2>

何かご意見は?

4

2 に答える 2

1

HTML の正しい位置にアンカー タグを追加するか、ids:を使用します。

アンカー:

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

ID:

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

name編集: 2 番目のアプローチをお勧めします。属性が HTML5 のアンカー タグに対して有効ではなくなったと思われるためです: http://www.w3.org/html/wg/drafts/html/master/obsolete.html#obsolete- but-conforming-features (以下のリンクを提供してくれた @Alohci に感謝します)。一方、非常に古いブラウザーで多くのユーザーをサポートする必要がある場合は、最初のブラウザーが適しています。

于 2013-03-26T16:39:54.103 に答える
-1

#-リンクはアンカータグに移動します:

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

その出力には何もありません。

于 2013-03-26T16:38:06.257 に答える