<img>
「alt」属性を持つ HTMLがあります。私の<img>
は でラップされてい<a>
ます。には<a>
「タイトル」属性があります。例えば:
<a title="" href ="page.html"><img src="image.jpg" alt="text"></a>
の「alt」属性の値を読み取り、<img>
それを の「title」属性値に書き込む必要があります<a>
。PHPでこれを行う方法はありますか?
あなたは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');
}
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'));
}
}
それが役に立てば幸い
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);
質問にはphpというタグが付けられていますが、クライアント側で同じことを行うためのシンプルでプレーンな 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');
これはいくらか片付けられる可能性がありますが、そのままでは比較的明確だと思います (私が望むよりも少し乱雑ではありますが)。
参考文献:
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>