PHP - 删除选定了特定属性的子项

时间:2014-01-27 16:41:28

标签: php removechild

我正在试图弄清楚如何删除选择了特定属性的孩子(文件名)。我有PHP在加载图像的页面上显示XML文件。如果有人在哪里点击任何图像或点击删除按钮 -

<a href=""><img src="' . $child['src'] . '" alt="gallery image" />Delete me</a>

它会知道在XML文件中找到的位置并将其删除。

这里加载并显示我的XML文件:

<?php 
$xml = simplexml_load_file('myPhotos.xml');
//echo $xml->getName() . "<br />";
foreach ($xml->children() as $child)
{
    echo '<img src="' . $child['src'] . '" alt="gallery image" />';
}
?>

这是我的XML结构:

<slideshow>
<image src="myPhotosResized/image1.jpg" desc="This is the 1st image!" />
<image src="myPhotosResized/image2.jpg" desc="This is the 2nd image!" />
<image src="myPhotosResized/image3.jpg" desc="This is the 3rd image!" />
<image src="myPhotosResized/image4.jpg" desc="This is the 4th image!" />
</slideshow>

2 个答案:

答案 0 :(得分:1)

假设您要实际删除该文件(而不仅仅是从DOM中删除它),请使用Ajax或使用定位脚本的链接包装图像以删除文件:

使用Ajax:

 <? 
    $xml = simplexml_load_file('myPhotos.xml');
    //echo $xml->getName() . "<br />";
    foreach ($xml->children() as $child)
    {
        echo '<img src="' . $child['src'] . '" alt="gallery image" onclick="deleteFile('.$child["src"].')" />';
    }
    ?>

<script>
function deleteFile(filename) {
    var t = this;
    $.ajax({
            url: 'deleteFile.php?filename='+filename,
            type: 'post',
            success: function(data) {
              t.style.display = 'none';//hide the link 
              alert('File deleted!');
            }
});
}
</script>    

在你的deleteFile.php上你需要使用:

$filename = $_GET['filename'];//gets the file name from the URL
unlink($filename);//deletes the file

第二个选项:

如果您必须使用PHP保留所有内容而不使用jQuery或Ajax,则只需使用链接包装图像并将其href设置为:

echo '<a href="deleteFile.php?filename=' . $child["src"] . '"><img src="' . $child['src'] . '" alt="gallery image" /></a>';   

希望这有帮助

答案 1 :(得分:0)

关键是要正确编写HTML,然后编写jQuery以实现魔术

假设您的HTML是这样的,请为您的元素命名

<img src="' . $child['src'] . '" class="deleteme" alt="gallery image" /><a href="#" class="clicktodelete">Delete me</a>

这个jQuery代码会做你想要的。将它放在文件的末尾

<script>
    $('.clicktodelete').click(function () {
        $(this).prev('.deleteme').hide();
    });
</script>