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 とタグがさらにある場合は、これを使用する必要があります。

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