Php 读取一个HTML标记的属性并将其写入另一个HTML标记的属性
我有一个带有“alt”属性的HTMLPhp 读取一个HTML标记的属性并将其写入另一个HTML标记的属性,php,html,Php,Html,我有一个带有“alt”属性的HTML。我的被包装在 我需要读取的“alt”属性值,并将其写入的“title”属性值。有没有办法在PHP中实现这一点?您可以通过PHP实现这一点 <a title="" href ="page.html"><img src="image.jpg" alt="text"></a> 您可以尝试使用JQUERY $url="http://example.com"; $html = file_get_contents($url);
。我的
被包装在
我需要读取
的“alt”属性值,并将其写入
的“title”属性值。有没有办法在PHP中实现这一点?您可以通过PHP实现这一点
<a title="" href ="page.html"><img src="image.jpg" alt="text"></a>
您可以尝试使用JQUERY
$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');
}
var altValue=$('img').attr('alt');
$('a').attr('title',altValue);
当您需要在onClick上使用时,如果您有更多的img和a标记,则必须使用此选项,如下所示
<script>
var altValue = $('img').attr('alt');
$('a').attr('title', altValue);
</script>
功能更改标题(本){
var altValue=$(this.find('img').attr('alt');
$(this.find('a').attr('title',altValue);
}
PHP是一种服务器端语言。因此,一旦呈现了输出,就不能再对其进行更改。(除非您使用PHP下载内容,然后输出更改后的数据,但这似乎只有在无法访问原始源代码时才有用)如果您使用PHP创建输出,您可以使用:
<script>
function changeTitle(this) {
var altValue = $(this).find('img').attr('alt');
$(this).find('a').attr('title', altValue);
}
</script>
$alt='text';
回声';
如果已经有了输出,可以使用jquery()
//完成页面后执行
$(函数(){
//标签中的每个图像
$('a img')。每个(函数(){
var$el=$(本);
var alt=$el.attr('alt');
$el.parent('a').attr('title',alt);
});
});
更新
如果它是纯PHP字符串修改,您还可以使用正则表达式来更改它,而不是dom操作:
<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>
$string='';
$pattern='/当问题被标记时,我想我应该提供一个简单、简单的JavaScript,在客户端执行同样的操作:
$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);
函数attributeToParent(标记、从、到、内部){
如果(!标记| |!从| |!到){
返回false;
}
否则{
within=within&&within.nodeType==1?within:document;
var all=在.getElementsByTagName(标记)内;
for(变量i=0,len=all.length;i
这可以稍微整理一下,但我认为它是相对清晰的(尽管比我希望的要混乱一些)
参考资料:
由空指针启动
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');
希望有帮助是的,有一种方法,例如DOM。您尝试过什么?如果您是通过PHP呈现整个内容,为什么不能呈现这两个标记的alt属性呢?如果您使用jquery/javascript来实现这一点,会更容易/更快。如果你使用PHP,那么最好让html的每个元素都有id来选择正确的标题。html是由Fireworks生成的,它有一个导出为html选项。这是一封HTML电子邮件。我正在对这段HTML进行一些后端处理,以添加所需的额外属性。好的,谢谢,这将为我获取给定图像的“alt”属性值。接下来,我需要将该值写入其周围锚标记的“title”属性。有什么想法吗?谢谢你用这个空指针把我踢开!Martinqt设法完成了解决方案。干杯好极了!!非常感谢这一点,它帮了我很大的忙!谢谢这个雨果,一个非常简洁的解决方案!而这会在网页上有所帮助。在我的例子中,我在后端做一些字符串处理。啊,好吧,更新了一些preg_替换,即使你已经有了你的awnser。谢谢这个Vinoth,而你的解决方案会在网页上有所帮助。在我的例子中,我在后端进行一些字符串处理。无论如何谢谢你!!!谢谢你,大卫!我需要这是一个后端进程的一部分,虽然。我正在处理一段来自“导出为HTML”的HTML。我需要通过一个脚本运行HTML来整理一下。为Javascript解决方案干杯。不客气!我认为这很可能是服务器端的事情,但我看到了(有些不必要的)jQuery答案,并希望提供一个简单的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');
$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'));
}
}