解析HTML和更改锚仅适用于每个跨度上的第一个锚

时间:2013-04-21 13:36:58

标签: html domparser

我想替换HTML上的每个锚点并使用此代码,但似乎缺少一些东西:

foreach($html->find('div') as $dict) {
    $dict->find('SPAN', 0)->find('A', 0)->href = "link.php?" . $dict->find('SPAN', 0)->find('A', 0)->innertext;
}

HTML结构如下:

<DIV>
    <SPAN> 
        Text text text <A HREF="link1.php">LINK_A</a>, 
        text text <A HREF="link1.php">LINK_B</a>.
    </SPAN>
</DIV>
...

我应该对该代码做的是更改html上的所有锚点:

<DIV>
    <SPAN> 
        Text text text <A HREF="link.php?LINK_A">LINK_A</a>, 
        text text <A HREF="link.php?LINK_B">LINK_B</a>.
    </SPAN>
</DIV>
...

但该代码仅适用于每个跨度的第一个锚点,如:

<DIV>
    <SPAN> 
        Text text text <A HREF="link.php?LINK_A">LINK_A</a>, 
        text text <A HREF="link1.php">LINK_B</a>.
    </SPAN>
</DIV>
...

我试图将代码修改为:

foreach($html->find('div') as $dict) {
    foreach($dict->find('SPAN', 0)->find('A', 0) as $anchor) {
        $anchor->href = "link.php?" . $anchor->innertext;
    }
}

但它变得最糟糕。我怎样才能做到这一点?感谢。

2 个答案:

答案 0 :(得分:1)

你宣称你只想在这里找到第一个跨度......

$dict->find('SPAN', 0)
// The 0 means the first one only I expect

答案 1 :(得分:0)

您只是循环遍历每个div,而不是您找到的每个锚标记。您的JavaScript代码看起来效率也很低。我不熟悉您正在使用的方法,但在jquery中,您可以执行类似

的操作
$("dic span a").each(function){
    //do something here
    //refer to the anchor tag using $(this)
})