使用CSS插入链接
时间:2020-03-06 15:03:21 来源:igfitidea点击:
我正在手工维护一个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伪元素,但是似乎没有办法重复案例编号。
解决方案
不适用于跨浏览器的方式。但是,我们可以使用一些相对琐碎的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的方法来应用它,也可以直接在页面末尾添加它。
CSS无法实现,而且CSS绝不是什么。客户端Javascript或者服务器端(选择插入的语言)是必经之路。
我认为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文件即可。
这是针对我们发布的HTML的jQuery解决方案:
$('.case').each(function() {
var link = $(this).html();
$(this).contents().wrap('<a href="example.com/script.php?id='+link+'"></a>');
});
本质上,在每个.case元素上,将获取该元素的内容,并将其放入包裹的链接中。
我们可能会有类似的内容(使用Javascript)。在<head>里面,有
<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>
然后在<body>的末尾
<script type="text/javascript" language="javascript">
makeLinks("case", "http://bugs.example.com/fogbugz/default.php?");
</script>
我已经对其进行了测试,并且效果很好。

