2013-03-26 2 views
1

Итак, я ответил на свой собственный вопрос и создал ТОС, который работает, он выплевывает все, что я хочу, соглашаясь, что метки привязки не работают. он не будет перескакивать на страницу, где находятся соответствующие теги 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> и

Любые мысли?

ответ

-1

# -links перейти к якорной тегу:

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

У вас нет какой-либо в этом выходе.

+0

так другими словами, мой php не так? – TheWebs

1

Либо добавить якорь тег в правильном положении в HTML или использовать id S:

Anchor:

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

ID:

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

EDIT: Я хотел бы предложить второй подход, так как я считаю, что атрибут name больше не подходит для тегов привязки в HTML5: http://www.w3.org/html/wg/drafts/html/master/obsolete.html#obsolete-but-conforming-features (спасибо @Alohci за предоставленную ссылку ниже). С другой стороны, если вам нужно поддерживать много пользователей в ДЕЙСТВИТЕЛЬНО старых браузерах, предпочтительнее первое.

+0

Большое спасибо за ссылку ... вот что я искал. :) – Steve

+0

ya но я не использую html 5 .... – TheWebs

Смежные вопросы