Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JS] Wizualne wybieranie kodu HTML fragmentów strony
Forum PHP.pl > Forum > Po stronie przeglądarki
kodereq
Witam.

Chodzi mi o rozwiązanie w JavaScript polegające na wybieraniu fragmentów strony poprzez klikanie myszą.

http://www.iconico.com/HTMLExtractor/ - chodzi o narzędzie tego typu (dokładniej o tą jego część, w której po najechaniu myszą pojawia się kod HTML wybranej części strony).

Rozwiązanie musi być zaimplementowane z użyciem JS/PHP.

Obecnie robię to w ten sposób: parsuję kod HTML za pomocą PHP i eregami pod każde '<td ' podstawiam '<td onclick="alert(this.innerHTML)"' oraz np. zamieniam '<div ' na '<div onclick="alert(this.innerHTML)"'. Rozwiązanie w pełni działa i sprawdza się nieźle, jednak szukam czegoś lepszego.

Bardzo proszę o sugestie.
dem
moja sugestia:

nie rob tego po stronie serwera tylko zrob po stronie przegladarki ;]

Kod
function test(obj) {
        alert(obj.innerHTML);
}
// a to ponizej niech sie wywoluje po zaladowaniu strony
var allDivs = document.getElementsByTagName("div");

for (i=0; i < allDivs.length; i++) {
        allDivs[i].onclick = function() { test(allDivs[i]) };
}


oczywiscie to jest pisane z palca i moze zawierac bledy..

to powinno dzialac jak tylko erix dopisze czego ja nie dopisalem biggrin.gif:D:D nie mam sily poprostu kminic;]
kodereq
Dziękuję bardzo za odpowiedź. Dobrze, rozwiązanie jest skuteczne, ale niewystarczające - co np. z układem tabelarycznym ?

Tutaj głównym problemem wydaje się być niezawodność rozwiązania - trzeba zająć się wszystkimi kontenerami, co gorsza niektóre kontenery mogą być umieszczone wewnątrz innych kontenerów (jedno kliknięcie wywołuje kilka onclicków).

Z niecierpliwością czekam na dodatkowe sugestie.

Obecnie jestem na etapie podpinania onmouseover pod każdy div oraz td. Problemem jest tylko nie, że najeżdżając na np komórkę tabeli czasami najeżdżam na np 3 warstwy na raz, co wywołuje potrójnie daną akcję - chciałbym aby akcja była wykonana pojedyńczo - tylko na jednym elemencie - czyli np tylko na jednej komóce tabeli, a nie na komórce w której jest umieszczona tabela z tą komórką.
erix
Cytat
chciałbym aby akcja była wykonana pojedyńczo - tylko na jednym elemencie

Jeśli masz podpinanie zdarzeń w mniej-więcej ten sposób:
Kod
function(e){
  e.stopPropagation();
  // ...
}
kodereq
@erix, jesteś wielki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.