24. januar 2006 - 21:22Der er
25 kommentarer og 1 løsning
reg exp
jeg skal have lavet noget der kan genkende id's på nogle div elementer
som det ser ud nu finder den elementer der har id's der hedder noget med 'thread_div['+id+'_', men skal have lavet den lidt mere kompleks evt. med lidt reg exp.
mine id's ser på nuværende tidspunkt sådan her ud (id=42): thread_div[42_233] thread_div[42_344] thread_div[42_32]
men den kunne finde dem dem når de ser sådan her ud (id=42): thread_div[5_42_233] thread_div[6_42_344] thread_div[87_42_32]
var div_arr = document.getElementsByTagName('div');
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
var div_arr = document.getElementsByTagName('div'); for(i=0; div_arr.length>i; i++) { var re = new RegExp("thread_div[[][0-9]+_"+id+"_[0-9]+[]]","ig"); if(re.test(div_arr[i])) { "DEN MATCHER MØNSTERET" } }
-- og hvis det skal tillades, at den foranstående kan udelades:
new RegExp("^thread_div\\[(\\d+_)?"+id+"_\\d+\\]$");
-- og jeg fjernede også moderatorerne, da de jo ikke giver mening i fast defineret kode (store/små bogstaver), og vil sløre, at det faktisk er hele id'et, der skal bruges !-)
Den skulle ikke kunne finde thread_div[42_233] og thread_div[5_42_233], altså hvor de er opstillede på begge måder... men den skulle kun søge efter den sidste gruppe hvor der er 3 tal med i
Kan den så ikke nøjes med at se således ud?
var re = new RegExp("^thread_div\\[\\d+_"+id+"_");
og lige en ting mere... de to backslashes foran [, hvad gør de? Escaper de bare [ eller hvad gør de?
'test' er en metode i RegExp-objektet som returnerer 'true', hvis objektets regulære udtryk matcher noget i strengen. Det forreste '\' escaper det næste '\' som escaper '['. ;-) Hvis du bruger: var re = new RegExp("^thread_div\\[\\d+_"+id+"_"); i stedet for: var re = new RegExp("^thread_div\\[\\d+_"+id+"_\\d+\\]$"); godtager du også fx 'thread_div[5_42_]' og 'thread_div[5_42_233_32]]' da den første ikke kræver at udtrykket dækker hele strengen.
Så skylder du vist mig en sodavand! ;-) Det var dit opslag i 'div_arr' den var gal med: 'div_arr[i]' skal rettes til 'div_arr[i]['id']', da førstnævnte giver 'div'-objektet som associativt array.
function expand_thread_all(id) { var div_arr = document.getElementsByTagName('div'); var tst = ''; for(i=0; div_arr.length>i; i++) { var reg_exp = new RegExp("^thread_div\\[(\\d+)_"+id+"_");
Hvis variablerne ligger sorteret i array'et: Kig på to efterfølgende elementer ad gangen (hvis de findes) og kopiér kun den første over i nyt array, hvis de er forskellige, ryk en plads frem i array'et og gentag. Bagefter kopieres det sidste element over - fanger også specialtilfældet hvor der kun er ét element.
og hvordan gør man så alt det her? som jeg har sagt det før - fatter ikke JS, men kunne som sagt have lavet det i PHP hvis det var.. det er bare ikke tilfældet at jeg skal lave det deri nu :)
synes rent faktisk at JS kodes i en lidt underlig og måske besværlig måde.. men det er vel en vanesag.. hehe
Ikke hvad jeg ved af, men det er da også meget sjovt at lave funktionen selv, eller hva? PHP ligger da for resten ikke så langt fra JS at det gør noget.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.