3

我有一个<img>带有“alt”属性的 HTML。我<img>的包裹在一个<a>. 有<a>一个“标题”属性。例如:

<a title="" href ="page.html"><img src="image.jpg" alt="text"></a>

我需要读取 的“alt”属性的值<img>并将其写入 .的“title”属性值<a>。有没有办法在 PHP 中做到这一点?

4

5 回答 5

2

你可以通过php做到这一点

$url="http://example.com";

$html = file_get_contents($url);

$doc = new DOMDocument();
@$doc->loadHTML($html);

$tags = $doc->getElementsByTagName('img');

foreach ($tags as $tag) {
       echo $tag->getAttribute('alt');
}
于 2012-12-19T12:24:40.823 回答
1

从 NullPointer 开始,

  $url="http://example.com";

  $html = file_get_contents($url);

  $doc = new DOMDocument();
  @$doc->loadHTML($html);

  $tags = $doc->getElementsByTagName('img');

  foreach ($tags as $tag) {
     $parent = $tag->parentNode;
     if($parent->nodeName == 'a') {
         $parent->setAttribute('tittle', $tag->getAttribute('alt'));
     }
  }

希望能帮助到你

于 2012-12-19T12:48:47.973 回答
0

PHP 是一种服务器端语言。所以一旦输出被渲染,你就不能再改变它了。(除非您使用 PHP 下载内容,然后输出更改的数据,但这似乎只有在您无法访问原始源时才有用)如果您在 php 中创建输出,您可以使用:

$alt = 'text';
echo '<a title="'.$alt.'" href ="page.html"><img src="image.jpg" alt="'.$alt.'"></a>';

如果你已经有了输出,你可以使用 jquery ( http://jquery.com/ )

<script type='text/javascript'>
//perform after page is done
$(function() {

  //each image in an a tag
  $('a img').each(function() {
    var $el = $(this);
    var alt = $el.attr('alt');
    $el.parent('a').attr('title', alt);
  });
});
</script>

更新

如果它的纯 PHP 字符串修改,你也可以使用正则表达式来改变它,而不是 dom 操作:

$string = '<a title="" href ="page.html"><img src="image.jpg" alt="text"></a>';
$pattern = '/<a(.*?)title="(.*?)"(.*?)<img(.*?)alt="(.*?)"(.*?)<\/a>/i';
$replacement = '<a${1}title="$5"${3}<img${4}alt="${5}"${6}</a>';
echo preg_replace($pattern, $replacement, $string);
于 2012-12-19T12:35:26.707 回答
0

虽然这个问题被标记为,但我想我会提供一个简单的、纯 JavaScript 的方法来在客户端做同样的事情:

function attributeToParent(tag, from, to, within) {
    if (!tag || !from || !to) {
        return false;
    }
    else {
        within = within && within.nodeType == 1 ? within : document;
        var all = within.getElementsByTagName(tag);
        for (var i = 0, len = all.length; i < len; i++) {
            if (all[i].getAttribute(from) && all[i].parentNode.tagName.toLowerCase() !== 'body') {
                all[i].parentNode.setAttribute(to, all[i].getAttribute(from));
            }
        }
    }
}

attributeToParent('img', 'alt', 'title');​

JS 小提琴演示

这可以稍微整理一下,但我认为它相对清晰(尽管比我想要的更混乱)。

参考:

于 2012-12-19T12:45:30.247 回答
0

您可以尝试使用 JQUERY,

<script>
    var altValue = $('img').attr('alt');
    $('a').attr('title', altValue);
</script>

当您需要 onClick 并且您有更多 img 和 a 标签时,您必须使用它,如下所示

<script>
    function changeTitle(this) {
        var altValue = $(this).find('img').attr('alt');
        $(this).find('a').attr('title', altValue);
    }
</script>
于 2012-12-19T12:30:26.473 回答