[Ajax+PHP] przekazanie wartosci zmiennej do znacznika title

0

Witam,
chcialem sobie zrobic tooltipy do linkow czy jakiegos tekstu - mam zroione, ale pomyslalem sobie ze szkoda zawalac kod stronki niepotrezbnym tekstem ktory mozna by pobierac z pliku - pomyslalem ze Ajax bylby do tego dobry (dzialam w mintAjax) ale nie mam za bardzo pomyslu jak zmienic zrobic aby pobrana wartosc zmiennej wrzucal mi do znaczkika title.

Tooltip jest jako wartswa div - ponizej linki do tego co jest i link do paczki z plikami.
Tu sa pokazane tooltipy
Tu jest paczka z wszystkimi plikami

0
var zmienna = "zawartość zmiennej";
vat titleTag = document.getElementsByTagName("title")[0];
if(titleTag != null && titleTag!="undefined")
    titleTag.innerHTML = zmienna;

Czytać manual!

0

to ja dorzuce od siebie pytanko - ma javascript jakiś taki genialny manual jak php.net? :)

0

Oficjalnie nie ma. Jednak np. na www.w3schools.com jest całkiem duża część JS opisana.

0

No niby fajnie - tylko ten document.getElementsByTagName zajmuje sie tagami np

<title>Dymkowe CMSowe helpy</title> ale juz olewa. Nie zrobi mi nic z title w linku a w to miejsce chcialem wrzucic swoj opis linku
0

Yy. Bo do pobiera znaczniki <title> z dokumentu, a nie atrybuty. No to chyba nic dziwnego, że olewa? Jak chcesz dostać się do atrybutu "title" znacznika to pobierz znacznik i się do atrybutu spokojnie dostaniesz.

0
<a href="#" title="cos" id="id">coś</a>
var link = document.getElementById("id");
var title = link.title;
///lub
title = link.getAttribute('title');

W sumie nie najgorszym rozwiązaniem jest drugie. Jest zgodne z DOMem więc łatwo jest migrować kod na inny język :)

0

zauwazylem, ze czesto sie stosuje wlasnie takia dużą ilość zmiennych pomocniczych, jak mozna by bylo napisac:

document.getElementById("id").getAttribute('title')

ma to jakieś inne zalety, poza przejrzystością i łatwiejszym zrozumieniem kodu? W sumie w delphi, to jak pamiętam, to często stosowałem całe litanie pokropek ;)

0

Ma jedną zasadniczą :) kod w IE:

var tmp = Window.status;

radośnie wywali się pod FF. Ze względu na poważne róznice pomiedzy przeglądarkami w JS trzeba, niestety, tworzyć dużo zmiennych pomocniczych. Następnie bardzo często korzysta się z takiego miłego testu:

if(tmp==null || tmp=="undefined"){
   // obsługa błędu lub przedefiniowanie zmiennej na coś co, najprawdopodobniej, rozumie FF lub IE
}

Poza tym JS jest interpretowany więc zapis "wielokropkiem" może spowodować dość poważną wywałkę strony. Tak możesz testować, tak jak podałem, stan/obecność obiektów i uniknąć wielu błędów.

0

getAttribute sprawdza zdaje się na większości przeglądarek stan początkowy - ustalony w kodzie,
czyli np jeśli w inpucie będzie w kodzie value="1", a user wprowadzi "2" to .value da "2" a getAttribute "1"

// aaa, źle zrozumiałem pytanie
no to chyba głównie przejrzystość, linia nie powinna mieć więcej jak powiedzmy 60 znaków (no tak na oko krótka powinna być ;P) a poza tym jeśli się wykorzystuje ten sam element chociażby dwa razy to lepiej zapisać w zmiennej niż szukać dwa razy tego samego elementu i powtarzać kod
poza tym czasami no nie ma rady, np zdaje się takie coś mi się wywalało kiedyś na jakiejś przeglądarce

body = document.getElementsByTagName('body')[0];

a

body = document.getElementsByTagName('body');
body = body[0];

już działało dobrze (nie było document.body w tej przeglądarce też jeśli ktoś chce się przykładu czepiać)

0

no generalnie dziala nice :) :

function zmiana()
{
  zmienna = "Boshe to dziala :)";
  var link = document.getElementById("id");
  var title = link.getAttribute('title');
  
  if(title != null && title!="undefined")
  {
    title = zmienna;
    }
  alert(title);
}

Dzieki - teraz szukam tutoriali do js - zwyczajnie nie znam znacznikow - zaczne od www.w3schools.com, ale jak ktos ma adres jakiegos fajnego spisu polecen to bylbym wdzieczny.

EDIT:
wlasnie udalo mi sie wykombinowac pobieranie w mintAjaxie zawartosci plikow:

function load(strona, div) // (strona , div) pozwala załadować dowolną stronę do danego div'a
{
    var req = mint.Request();
    req.Send(strona,div);
}

co ciekawe teraz jesli wywoluje w pierwszym linku ladowanie strony do diva a gdy w 2 linku wywoluje funkcje zmiana to dostaje w alercie 'null', z reszta zauwazylem ze dla funkcji zmiana liczy sie tylko pierwszy napotkany atrybut title - dla kazdego nastepnego przypisuje ten sam wynik ( czyli miejmy cos zwalonego w pierwszym title to nawet gdyby w 2 title bylo OK znow dostaniemy blad z 1 title)

0

I oto napisane :) . . . dla chetnych udostepniam skrypt:

<script type="text/javascript" src='zewnetrzny.js'></script>

<!-- <![CDATA[

var zawar="";

function wypisz(tekst)
{
   var t1=["a","e","s","c","z","x","o","l","n","A","E","S","C","Z","X","O","L","N"];
   var t2=["±","ę","¶","ć","ż","Ľ","ó","ł","ń","ˇ","Ę","¦","Ć","Ż","¬","Ó","Ł","Ń"];
   var daj=new RegExp("%a","g");
   for(var i=0;i<18;i++){
   daj.compile("%"+t1[i],"g");
   tekst=tekst.replace(re,t2[i])}
   zawar = tekst;
   return zawar;
}

function dymek(zawartosc,zdarzenie,chmurka)
{
  if(!zawartosc.title ||!document.createElement)return
  chmurka = document.createElement("div")
  chmurka.move = function(zdarzenie)
	{
    		zdarzenie = zdarzenie || event
                chmurka.style.left = zdarzenie.clientX-370+"px" /*clientX odniesienie do lewego, górnego rogu dokumentu*/
    		chmurka.style.top = zdarzenie.clientY+5+"px"}

  chmurka.hide = function(x)
	{
    		zawartosc.title = chmurka.innerHTML /*zwraca mi to co jest w title*/
    		if(x = document.getElementById("dymeks")) document.body.removeChild(x)
  }

  chmurka.innerHTML='<img  style="vertical-align:middle"  src="info.gif">&nbsp;&nbsp;'+chmurka.innerHTML;
  chmurka.style.border='2px solid #BABABA';
  chmurka.style.padding='4';
  chmurka.style.color='#1B4966';
  chmurka.style.background='#FFFFFF';
  chmurka.style.width='350px';   /*z gory ustalony rozmiar dymka*/
  chmurka.move(zdarzenie);
  chmurka.style.filter='alpha(opacity=75)';     /*przezroczyste tlo dymka w IE*/
  chmurka.style.opacity='0.75'; /*przezroczyste tlo dymka w FF i Operze*/
  chmurka.id = "dymeks"
  chmurka.innerHTML = zawar;//zawartosc.title;  /*to decyduje co jest w dymku 'zawartosc.title;'*/
  zawartosc.title=""
  document.body.appendChild(chmurka)
  w=chmurka.offsetHeight;s=chmurka.offsetWidth;d=document;b=d.body;E=d.documentElement

  zawartosc.onmousemove = function(zdarzenie){
      sT=(E.scrollTop||b.scrollTop);
      sL=(E.scrollLeft||b.scrollLeft);
      chmurka.style.top=(g=(zdarzenie||event).clientY+sT)+((g+38+w)>(sT+b.clientHeight)?(-w-10):38)+'px';
      chmurka.style.left=(l=(zdarzenie||event).clientX+sL)+((l+15+s)>(sL+b.clientWidth)?(-s-5):15)+'px';
  }
  zawartosc.onmouseout=function(){
      zawartosc.title=chmurka.innerHTML;
      if(chmurka)document.body.removeChild(chmurka);
  }
  zawartosc.onmousemove(zdarzenie);
}


// ]]> -->

Jeszcze niezoptymalizowane, ale juz dzialajace - jak komus sie chce zoptymalizowac to moze rowniez tu wrzucic - dzieki za wszelka pomoc.
Mala prezentacja: Kliknij tutaj

W pliku 'zewnetrzny.js' sa teksty jakie beda w dymku. Format wewnatrz pliku:

tooltip1=
'z zewnetrznego pliku zmienna 1.';

tooltip2=
'to jest teskst z tego samego zewnetrznego pliku ale ze zmiennej 2';

Wywolanie skryptu:

onmouseover="wypisz(tooltip1); dymek(this,event);"

1 użytkowników online, w tym zalogowanych: 0, gości: 1