2011-08-14 61 views
5

Dưới đây là đoạn mãLàm thế nào để thêm lớp vào một đối tượng img trong DOM, PHP?

$doc = new DOMDocument(); 
$doc->loadHTML($article_header); 

$imgs = $doc->getElementsByTagName('img'); 
foreach ($imgs as $img) { 

Into $imgs đi DOM thẻ img. Bây giờ tôi muốn thay đổi thẻ img gốc bằng cách thêm một số lớp vào nó.

SO nếu $article_header là thế này:

"some text"...<img src = 'http://some_source'>...some text... 

Bây giờ tôi muốn nó trở thành này:

"some text"...<img class = 'someclass' src = 'http://some_source'>...some text... 

CẬP NHẬT

Tôi lặp lại. Biến bắt đầu là $article_header. Vì vậy, tất cả các thay đổi phải được thực hiện với nó.

Với mã của tôi, tôi chỉ tìm kiếm thông qua $article_header cho thẻ img, tìm chúng đưa chúng vào một số biến và thay đổi chúng có ok, nhưng làm cách nào tôi có thể đặt tất cả thay đổi về $article_header ???

+0

đọc hàm setAttribute –

+0

Tôi nghĩ có thể có giải pháp đơn giản hơn bằng cách sử dụng css. Bạn có thể chỉ cho chúng tôi những gì bạn cần tất cả những gì cho? – Chronial

+0

Bây giờ tôi nghĩ rằng đó là một chút phức tạp để làm điều đó với css. Tôi có tinymce và người dùng chèn hình ảnh vào nó, khi nhỏ đăng nó lên php, tôi cần hình ảnh để có một số lớp như vậy sau này khi người dùng xem kết quả javascript có thể kích hoạt một số bộ sưu tập hình ảnh trên nhắm mục tiêu hình ảnh nhắm mục tiêu lớp – David

Trả lời

10

Trong vòng lặp foreach, hãy gọi $img->setAttribute('class', 'someclass');. Cái này cần phải dùng mẹo. Xem thêm tại http://docs.php.net/manual/en/domelement.setattribute.php

Sau đó, bạn cần lưu lại tài liệu đã sửa đổi bằng cách sử dụng $article_header = $doc->saveXml();.

+0

Ok tôi sẽ thêm lớp vào $ img, nhưng vấn đề là $ article_header sẽ vẫn như cũ. Làm thế nào để thay đổi mọi thứ ở đó? – David

+0

Tôi đã chỉnh sửa câu trả lời của mình để thêm phần đó. Phần thứ hai phải được thực hiện bên ngoài foreach nếu không nó là một chút lãng phí. – Seldaek

+0

đang cố gắng ... sẽ viết lại – David

7

Nếu bạn biết rằng nguyên tố này sẽ không có một lớp thiết đã bạn chỉ có thể sử dụng DOMElement::setAttribute(), như:

$img->setAttribute('class','someClass'); 

Nếu bạn không chắc chắn nếu nguyên tố này đã có thể có một bộ lớp, sau đó bạn nên làm một getAttribute() đầu tiên và sau đó thêm lớp của bạn vào danh sách các lớp.

Các vấn đề liên quan