PHP DOM sınıf enjeksiyon

4 Cevap php

idea

JQuery ile, tüm :first-child ve belgede :last-child elemanları (iyi, hemen hemen tüm :)) sınıfı ile first hangi olabilir daha sonra stili (işaretlemek başardı ul#navigation kolayca adreslenebilir olacaktır, yani ilk li ul#navigation .first).

Ben aşağıdaki kod kullanılır:

  var $f = $('*:first-child')
      $f.addClass('first');
  var $l = $('body *:last-child')
      $l.addClass('last');

example

http://jsbin.com/ikuca/3

Örnek burada zaten - bu ancak, o an kolay dil benim için, sadece diğer prototyped bir fikir bunu yapmak için bir yol değil.

question

Şimdi, php ile aynı yapmak mümkün eğer benim soru, yani olmayan-JS kullanıcılar / araçlar aynı etkileri ve ek stil olabilir ve aynı zamanda tarayıcı üzerinde daha az abartılı olur.

Yani, bu çıkış yakalamak html olarak ayrıştırmak ve bu sınıfı easily enjekte etmek mümkündür php?

clarification

Ben oldukça farkındayım output buffering, sadece onunla çok şeyler yapmadıysanız - Ayrıca, ben php olarak çıktı string modificating hakkında emin değilim parsed dom (olmadan regex) - ve nasıl sunucuda zor o olacak - tabii önbelleğe alma ile, yani bütün bu şeyler sayfa olacak kadar once çalışacak yeniden düzenlenebilir.

4 Cevap

Sana output buffering sizin monte PHP sayfası yakalayabilir ve sonra add the class attributes için üzerinde DOM ve XPath kullanmaz olabilir emin değilim, ama soru ilk etapta sayfayı montaj yaparken neden sadece elemanları üzerine sınıfları koymayın, nedir? Size jQuery ve yakalama kaydeder.

Eğer kullanılan jQuery ifadesi bir CSS seçici çünkü Ayrıca, yapabilmek için jQuery ile CSS sınıfları ekleyerek ul#navigation.first, çok biraz garip, böylece CSS ilk çocuk stil doğrudan kullanabilirsiniz dosya. Bir sınıf eklemek için tek nedeni .first Eğer işlemi yapamadığımız tarayıcılar ile geriye doğru uyumlu olmasını istiyorsanız :first-child.

Ben bunu PHP daha jQuery bunu yapmak daha kolay bulacaksınız düşünüyorum, ama PHP yapılabilir.

Herhangi bir çıktı göndermeden önce ob_start fonksiyonu ile etkinleştirmek çıktı tamponlama, istediğiniz çıkış yakalamak. Eğer bir parametre olarak HTML kodunu almak ve daha sonra PHP's DOM functions kullanarak HTML işleyebilirsiniz ob_start() bir PHP işlevi iletebilirsiniz.

jQuery müşterinin Borwser çalışır. PHP sunucu üzerinde çalışır. Bunu servis kez sunucudan tarayıcıda DOM değiştiremezsiniz.

Ne yapabileceğini, uygun sınıflar zaten sayfa hizmet etmektir. Eğer bir tablo yazdırmak zaman PHP Örneğin:

<table>
<?php
$i=0;
foreach ($rows as $row):
?>
    <tr class=<?php echo ($i%2==0?'even':'odd')?>
        <td><?php echo $row;</td> 
    </tr>
<?php
endforeach;
?>
</table>

ps. Eğer gerçekten JS olmadan istemcileri desteklemek istiyor musunuz?

You could even use the same CSS selectors by using some of the libraries mentioned here. I read that the phpQuery library even has the same :first-child pseudo-class you need.

Ben içtenlikle caching veya başka CPU kullanımı birkaç isteği ile 100% kadar gidecek kullanmayı planlıyorsanız umuyoruz.