【问题标题】:Insert a Link Using CSS使用 CSS 插入链接
【发布时间】:2010-09-14 23:18:46
【问题描述】:

我正在手动维护一个 HTML 文档,并且我正在寻找一种方法来自动在表格中的文本周围插入链接。让我举例说明:

<table><tr><td class="case">123456</td></tr></table>

我想在我们的错误跟踪系统(顺便说一下,它是 FogBugz)中,自动将带有“case”类的 TD 中的每个文本链接到该案例。

所以我想把“123456”改成这种形式的链接:

<a href="http://bugs.example.com/fogbugz/default.php?123456">123456</a>

这可能吗?我玩过 :before 和 :after 伪元素,但似乎没有办法重复案例编号。

【问题讨论】:

  • 自动是什么意思?您需要在 HTML 上运行一些应用程序,将其转换为所需的结果。

标签: html hyperlink fogbugz


【解决方案1】:

不是以跨浏览器工作的方式。但是,您可以使用一些相对简单的 Javascript 来做到这一点。

function makeCasesClickable(){
    var cells = document.getElementsByTagName('td')
    for (var i = 0, cell; cell = cells[i]; i++){
        if (cell.className != 'case') continue
        var caseId = cell.innerHTML
        cell.innerHTML = ''
        var link = document.createElement('a')
        link.href = 'http://bugs.example.com/fogbugz/default.php?' + caseId
        link.appendChild(document.createTextNode(caseId))
        cell.appendChild(link)
    }
}

您可以使用 onload = makeCasesClickable 之类的内容应用它,或者直接将其包含在页面末尾。

【讨论】:

  • 小心在链接中盲目地包装那些 TD 内容;块级元素可能会出现,并且它们在 A 标记内无效。此外,我会找到正确的表格并获取其子元素,而不仅仅是舀出文档中的所有 TD。
【解决方案2】:

这是针对您发布的 HTML 的jQuery 解决方案:

$('.case').each(function() {
  var link = $(this).html();
  $(this).contents().wrap('<a href="example.com/script.php?id='+link+'"></a>');
});

本质上,在每个 .case 元素上,都会抓取元素的内容,然后将它们放入包裹在它周围的链接中。

【讨论】:

    【解决方案3】:

    CSS 不可能,而且这不是 CSS 的用途。客户端 Javascript 或服务器端(插入选择的语言)是要走的路。

    【讨论】:

      【解决方案4】:

      我认为 CSS 不可能。 CSS 只应该影响内容的外观和布局。

      这似乎是 PHP 脚本(或其他语言)的工作。您没有提供足够的信息让我知道最好的方法,但可能是这样的:

      function case_link($id) {
          return '<a href="http://bugs.example.com/fogbuz/default.php?' . $id . '">' . $id . '</a>';
      }
      

      然后在您的文档中:

      <table><tr><td class="case"><?php echo case_link('123456'); ?></td></tr></table>
      

      如果你想要一个 .html 文件,只需从命令行运行脚本并将输出重定向到一个 .html 文件。

      【讨论】:

        【解决方案5】:

        你可以有这样的东西(使用 Javascript)。 &lt;head&gt;里面有

        <script type="text/javascript" language="javascript">
          function getElementsByClass (className) {
            var all = document.all ? document.all :
              document.getElementsByTagName('*');
            var elements = new Array();
            for (var i = 0; i < all.length; i++)
              if (all[i].className == className)
                elements[elements.length] = all[i];
            return elements;
          }
        
          function makeLinks(className, url) {
            nodes = getElementsByClass(className);
            for(var i = 0; i < nodes.length; i++) {
              node = nodes[i];
              text = node.innerHTML
              node.innerHTML = '<a href="' + url + text + '">' + text + '</a>';
            }
          }
        </script>
        

        然后在&lt;body&gt;的末尾

        <script type="text/javascript" language="javascript">
          makeLinks("case", "http://bugs.example.com/fogbugz/default.php?");
        </script>
        

        我已经测试过了,效果很好。

        【讨论】:

          【解决方案6】:

          我知道这是一个老问题,但我偶然发现了这篇文章,寻找使用 CSS 创建超链接的解决方案并最终制作了我自己的,对于像我一样偶然发现这个问题的人可能会感兴趣:

          这是一个名为 'linker();' 的 php 函数,它启用了一个虚假的 CSS 属性

          连接:'url.com';

          对于#id 定义的项目。 只需让 php 在您认为值得链接的每个 HTML 项目上调用它。 输入是 .css 文件作为字符串,使用:

          $style_cont = file_get_contents($style_path);

          以及对应项目的#id。以下是全部内容:

              function linker($style_cont, $id_html){
          
              if (strpos($style_cont,'connect:') !== false) {
          
                  $url;
                  $id_final;
                  $id_outer = '#'.$id_html;
                  $id_loc = strpos($style_cont,$id_outer);    
          
                  $connect_loc = strpos($style_cont,'connect:', $id_loc);
          
                  $next_single_quote = stripos($style_cont,"'", $connect_loc);
                  $next_double_quote = stripos($style_cont,'"', $connect_loc);
          
                  if($connect_loc < $next_single_quote)
                  {   
                      $link_start = $next_single_quote +1;
                      $last_single_quote = stripos($style_cont, "'", $link_start);
                      $link_end = $last_single_quote;
                      $link_size = $link_end - $link_start;
                      $url = substr($style_cont, $link_start, $link_size);
                  }
                  else
                  {
                      $link_start = $next_double_quote +1;
                      $last_double_quote = stripos($style_cont, '"', $link_start);
                      $link_end = $last_double_quote;
                      $link_size = $link_end - $link_start;
                      $url = substr($style_cont, $link_start, $link_size);    //link!
                  }
          
                  $connect_loc_rev = (strlen($style_cont) - $connect_loc) * -1;
                  $id_start = strrpos($style_cont, '#', $connect_loc_rev);
                  $id_end = strpos($style_cont,'{', $id_start);
                  $id_size = $id_end - $id_start;
                  $id_raw = substr($style_cont, $id_start, $id_size);
                  $id_clean = rtrim($id_raw);                             //id!
          
                  if (strpos($url,'http://') !== false) 
                  {
                      $url_clean = $url;
                  }
                  else
                  {
                      $url_clean = 'http://'.$url;
                  };
          
                  if($id_clean[0] == '#')
                  {
                      $id_final = $id_clean;
          
                      if($id_outer == $id_final)
                      {
                          echo '<a href="';
                          echo $url_clean;
                          echo '" target="_blank">';
                      };
                  };
              };
          };
          

          这可能会使用 .wrap() 或 getelementbyID() 等命令来改进/缩短 因为它只生成&lt;a href='blah'&gt; 部分,但看到&lt;/a&gt; 无论如何都会在没有开头子句的情况下消失,如果你只是将它们添加到任何地方它仍然有效:D

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-02-12
            • 1970-01-01
            • 2021-07-21
            • 1970-01-01
            • 1970-01-01
            • 2015-10-16
            • 1970-01-01
            • 2018-07-19
            相关资源
            最近更新 更多