Kipengele kilichoombwa hakijaunganishwa kwenye muundo wa dom. Blogu nyingine ya msanidi wavuti. Kuchagua vipengele kwa darasa la CSS

Katika somo hili tutaangalia misingi ya kufanya kazi na matukio, sifa na getElementById katika JavaScript.

Katika masomo yaliyotangulia, tulisoma uwezo wa kimsingi wa lugha ya JavaScript. Kuanzia na somo hili, tutafanya kile ambacho JavaScript imeundwa hasa - tutarekebisha vipengele vya ukurasa wa HTML na kujibu vitendo vya mtumiaji. Maandishi yetu yatakuwa ya kuvutia zaidi na yenye manufaa.

Tutaanza kwa kufundisha msimbo wetu kujibu vitendo vya mtumiaji wa tovuti. Kwa mfano, mtumiaji atabofya mahali fulani na panya, na msimbo wetu katika kujibu itabidi kuchakata kubofya huku na kuonyesha habari fulani kwenye skrini.

Vitendo vya mtumiaji tunavyoweza kufuatilia kupitia JavaScript vinaitwa matukio. Matukio yanaweza kuwa kama ifuatavyo: kulia panya kwenye kipengele cha ukurasa, mwongozo panya kwa kipengele cha ukurasa au kinyume chake - kujali mshale wa panya kutoka kwa kipengele na kadhalika. Kwa kuongeza, kuna matukio ambayo hayategemei vitendo vya mtumiaji, kwa mfano, tukio wakati ukurasa wa HTML umewekwa kwenye kivinjari.

Kuna njia kadhaa za kufanya kazi na matukio katika JavaScript. Tutaanza na rahisi zaidi kati yao.

Misingi ya Tukio

Njia rahisi zaidi ya kuweka jibu la kipengele kwa tukio maalum ni kubainisha kwa kutumia sifa ya lebo maalum. Kwa mfano, tukio "bonyeza panya" inalingana na sifa ya kubofya, tukio "panya juu"- sifa ya onmouseover, na tukio "kipengele cha majani ya mshale"- sifa ya onmouseout.

Thamani ya sifa iliyo na tukio ni msimbo wa JavaScript. Katika mfano ufuatao kwa kubofya kitufe na panya kazi ya tahadhari itatekelezwa:

Na sasa kwa kubofya kazi ya func itatekelezwa kwenye kipengele:

kazi func() (tahadhari("!");)

Huwezi kufanya kazi moja tu, lakini kadhaa:

kazi func1() ( tahadhari("1"); ) kazi func2() ( tahadhari("2"); )

Tafadhali kumbuka kuwa ikiwa unahitaji nukuu mara mbili ndani ya sifa (kwa mfano, kwa kamba) na nukuu za nje za sifa pia ni nukuu mbili - bonyeza = "tahadhari ("!")"- kanuni hii haitafanya kazi.

Kuna njia kadhaa za kupambana na hili: unaweza kubadilisha dondoo za nje hadi nukuu moja bonyeza = "tahadhari ("!")", unaweza pia kuepuka nukuu za ndani kwa kurudi nyuma bonyeza="tahadhari(\"!\)" au sogeza tu msimbo wa JavaScript kutoka kwa sifa hadi kitendakazi, na uache tu jina la kazi katika sifa bonyeza="func()".

Jambo hilo hilo litatokea ikiwa utaweka nukuu za nje za sifa hiyo katika nukuu moja na pia kutumia nukuu moja kwa kamba: bonyeza = "tahadhari ("!")"- hapa, pia, kila kitu kinatatuliwa kwa njia sawa.

Jedwali la sifa la matukio Kufanya kazi na getElementById

Sasa tutajifunza jinsi ya kupokea vipengele vya ukurasa wa HTML na kufanya udanganyifu mbalimbali nao (tutaweza kubadilisha, kwa mfano, maandishi yao na rangi na mambo mengine mengi muhimu).

Wacha tuseme tuna lebo kwenye ukurasa na sifa ya kitambulisho iliyowekwa test . Wacha tuandike kiunga cha lebo hii kwenye kigezo cha kutofautisha. Ili kufanya hivyo, lazima tutumie njia ya getElementById, ambayo hupata kipengele kwa kitambulisho chake.

Ingizo hili litatokea wakati kitufe ambacho tumepewa sifa ya kubofya kimebofya. Kwa kubofya kitufe hiki, kipengele cha kukokotoa kitafanya kazi, ambacho kitapata kipengee kwenye ukurasa wa HTML chenye kitambulisho sawa na kujaribu na kuandika. kiungo kwa hilo kwa kutofautisha kwa elem:

Sasa katika kigezo cha kutofautisha tuna kiungo cha kipengele kilicho na sifa ya kitambulisho katika thamani ya jaribio. Elem ya kutofautiana yenyewe ni kitu.

Kitu hiki na lebo ya ukurasa wa HTML zimeunganishwa kwa kila mmoja - tunaweza kubadilisha sifa zozote za kitu cha elem na wakati huo huo tutaona mabadiliko kwenye ukurasa wa HTML ambayo yatatokea kwa kipengee tulichopokea.

Wacha tuone jinsi hii inavyotokea katika mazoezi.

Misingi ya kufanya kazi na sifa za HTML kupitia JavaScript

Sasa tutasoma na kubadilisha sifa za lebo. Wacha tuwe na ingizo tena na kitambulisho sawa na kujaribu na kitufe, tukibofya ambayo kitendakazi cha func kitazinduliwa:

Ndani ya kazi ya func tutapokea mchango wetu kwa kitambulisho chake na uandike kiunga kwake katika utofauti wa elem:

kazi func() ( var elem = document.getElementById("test"); )

Hebu sasa tuonyeshe yaliyomo katika sifa zetu za ingizo. Ili kufikia, kwa mfano, sifa ya thamani, unapaswa kuandika yafuatayo: elem.value , ambapo elem ni kigezo ambamo tuliandika kiungo cha kipengele chetu kwa kutumia getElementById, na thamani ni sifa ya lebo inayotuvutia.

Tunaweza kuonyesha maudhui ya sifa kupitia tahadhari kwa njia hii - alert(elem.value) - au tuandike kwa mabadiliko fulani. Hebu tufanye hivi:

kazi func() ( var elem = document.getElementById("test"); tahadhari(elem.value); //itaonyesha "!")

Tunaweza kusoma maadili ya sifa nyingine kwa njia ile ile, kwa mfano, elem.id - tunasoma thamani ya sifa ya kitambulisho, na elem.type - thamani ya sifa ya aina. Tazama mfano:

kazi func() ( var elem = document.getElementById("test"); tahadhari(elem.value); //itaonyesha "!" tahadhari(elem.id); //itaonyesha tahadhari ya "test"(elem.type) ); //itaonyesha "maandishi")

Huwezi kusoma tu maadili ya sifa, lakini pia ubadilishe. Kwa, kwa mfano, kubadilisha thamani ya sifa ya thamani, unahitaji tu kuikabidhi kwa elem.value construct:

kazi func() ( var elem = document.getElementById("test"); elem.value = "www"; //присвоим новое значение атрибуту value } !}

Nambari ya HTML itaonekana kama hii (sifa ya thamani itakuwa www):

Kweli, sasa jambo gumu zaidi - huwezi kuingiza utofauti wa elem, lakini jenga safu ya alama kwa njia hii:

kazi func() ( alert(document.getElementById("test").value); //itaonyesha "!" )

Kwa njia hiyo hiyo (mnyororo) unaweza kuandika tena sifa:

kazi func() ( document.getElementById("test").value = "www"; }!}

Hata hivyo, katika hali nyingi, kuanzisha kutofautiana ni rahisi zaidi. Linganisha mifano miwili - sasa nimeanzisha kutofautisha kwa elem na ninaweza kusoma idadi yoyote ya sifa, wakati getElementById inaitwa. mara moja tu:

kazi func() ( var elem = document.getElementById("test"); elem.value = "www"; elem.type = "submit"; }!}

Sasa sitangushi utaftaji mpya na kwa hivyo lazima nipigie getElementById mara mbili:

kazi func() ( document.getElementById("test").value = "www"; document.getElementById("test").type = "submit"; }!}

Kwa maoni yangu, nambari hii imekuwa ngumu zaidi, ingawa inachukua mstari mmoja mdogo. Kwa kuongeza, ikiwa ninataka kubadilisha thamani ya id kutoka mtihani hadi, kwa mfano, www, itabidi niifanye katika maeneo mengi, ambayo si rahisi sana.

kwa kivinjari. Kupata vitu kwenye ukurasa, ambayo njia ya getElementById hufanya, ni operesheni polepole ( na kwa ujumla kazi yoyote iliyo na vipengee vya ukurasa ni operesheni polepole- kumbuka hii).

Kwa upande wetu, ikiwa tunatumia getElementById kila wakati, basi kivinjari kitachakata ukurasa wa HTML kila wakati na kutafuta kipengee kilicho na kitambulisho mara kadhaa (haijalishi kwamba vitambulisho ni sawa - kivinjari kitafanya yote. vitendo mara kadhaa), kufanya shughuli zisizo na maana ambazo zinaweza kupunguza kasi ya uendeshaji wa kivinjari.

Ikiwa tunatumia kutofautisha kwa elem, hakuna utaftaji kwenye ukurasa unaotokea (kipengele tayari kimepatikana na kiunga chake kiko kwenye utofauti wa elem).

Isipokuwa: darasa na kwa sifa

Tayari umejifunza jinsi ya kufanya kazi na sifa kupitia JavaScript na sasa ni wakati wa kukuambia kuwa sio kila kitu ni rahisi sana - kuna ubaguzi wakati wa kufanya kazi na sifa - hii ndio sifa ya darasa.

Neno hili ni maalum katika JavaScript na kwa hivyo hatuwezi kuandika kwa urahisi darasa.elimu kusoma thamani ya sifa ya darasa. Badala yake unapaswa kuandika elem.className.

Mfano ufuatao unaonyesha thamani ya sifa ya darasa:

kazi func() ( var elem = document.getElementById("test"); alert(elem.className); )

Kwa njia, kuna sifa nyingine zinazoitwa tofauti na mali. Kwa mfano, for() sifa ina mali inayoitwa htmlFor.

Kufanya kazi na hii

Sasa tutafanya kazi na kitu maalum hiki, ambacho kinaonyesha kipengele cha sasa (kipengele ambacho tukio hilo lilitokea). Zaidi ya hayo, inaonyesha kana kwamba kipengele hiki tayari kilikuwa kimepatikana kwa mbinu ya getElementById.

Wacha tuone jinsi ya kufanya kazi na hii na ni nini urahisi wa njia hii.

Hebu tuwe na kazi ya kubofya pembejeo ili kuonyesha maudhui ya thamani yake.

Kwa sasa unaweza tu kufanya uamuzi huu:

kazi func() ( var elem = document.getElementById("test"); tahadhari(elem.value); )

Kimsingi, suluhisho hili ni zuri, lakini sasa fikiria kuwa tuna pembejeo nyingi na tunapobofya kila moja, tunahitaji kuonyesha thamani yake.

Katika kesi hii, tutamaliza na kitu kama hiki:

kazi func1() ( var elem = document.getElementById("test1"); alert(elem.value); ) kazi func2() ( var elem = document.getElementById("test2"); tahadhari(elem.value); ) kazi func3() ( var elem = document.getElementById("test3"); tahadhari(elem.value); )

Sasa upungufu wa mbinu yetu unaonekana wazi - kwa kila pembejeo tunapaswa kuunda kazi yetu ya usindikaji wa kubofya, na kazi hizi hufanya karibu sawa.

Ikiwa tuna pembejeo 10, tutalazimika kufanya kazi 10, ambayo sio rahisi.

Wacha turahisishe kazi yetu: tutapitisha kitambulisho cha kipengee cha sasa kama kigezo cha kazi. Na badala ya idadi kubwa ya kazi, kila kitu kitapunguzwa kwa kazi moja:

kazi func(id) ( var elem = document.getElementById(id); tahadhari(elem.value); )

Walakini, suluhisho hili bado lina shida - kila kipengee kitalazimika kuingiza kitambulisho tofauti, ambacho pia ni ngumu kidogo.

Kwa hivyo, wacha tuangalie chaguo la kutatua shida kwa kutumia hii .

Wacha tuifanye ili kila ingizo lionyeshe yaliyomo wakati unapobofya. Ili kufanya hivyo, tunapitisha kitu hiki kama parameta kwa kazi, kama hii: func(this) .

Yetu hii inapitishwa kama kigezo cha kukokotoa na kuishia kwenye kigezo cha kutofautisha. Kipengele hiki kinafanya kama kilipatikana kwa njia hii: var elem = document.getElementById(...), lakini huna haja ya kuipokea kwa njia hii, kila kitu tayari tayari huko na unaweza kuitumia. Kwa mfano, elem.value inaashiria thamani ya mchango wetu na kadhalika.

Kwa hivyo, hapa kuna suluhisho rahisi zaidi kwa shida yetu:

kazi func(elem) ( tahadhari(elem.value); )

Misingi ya CSS

Katika JavaScript, kufanya kazi na sifa za CSS hutokea kwa kubadilisha thamani ya sifa ya mtindo kwa kipengele. Kwa mfano, ili kubadilisha rangi unahitaji kujenga mlolongo ufuatao - elem.style.color- na uipe thamani ya rangi inayotaka:

kazi func() ( var elem = document.getElementById("test"); elem.style.color = "nyekundu"; )

Huwezi pia kuingiza utofauti wa elem, lakini jenga mlolongo mrefu sana.

Kufanya kazi na mfano wa DOM

Kila kitu cha Dirisha kina sifa ya hati inayorejelea kitu cha Hati. Kipengee hiki cha Hati si kitu cha pekee. Ni kitu kikuu cha API pana inayojulikana kama Muundo wa Kitu cha Hati (DOM), ambayo inafafanua jinsi maudhui ya hati yanaweza kufikiwa.

Muhtasari wa DOM

Muundo wa Kitu cha Hati (DOM) ni kiolesura cha msingi cha programu cha programu ambacho hutoa uwezo wa kufanya kazi na maudhui ya hati za HTML na XML. Kiolesura cha programu ya DOM (API) sio ngumu sana, lakini kuna vipengele vingi vya usanifu ambavyo unapaswa kufahamu.

Kwanza, elewa kuwa vipengee vilivyowekwa katika hati za HTML au XML vinawakilishwa kama mti wa vitu vya DOM. Mwonekano wa mti wa hati ya HTML una nodi zinazowakilisha vipengele au lebo, kama vile na

Na nodi zinazowakilisha mistari ya maandishi. Hati ya HTML inaweza pia kuwa na nodi zinazowakilisha maoni ya HTML. Fikiria hati ifuatayo rahisi ya HTML:

Sampuli ya Hati Hii ni hati ya HTML

Mfano rahisi maandishi.

Uwakilishi wa DOM wa hati hii umeonyeshwa kwenye mchoro ufuatao:

Kwa wale wasiofahamu miundo ya miti katika programu ya kompyuta, ni vyema kujua kwamba istilahi za kuzielezea ziliazimwa kutoka kwa miti ya familia. Node iko moja kwa moja juu ya nodi hii inaitwa mzazi kuhusiana na nodi hii. Nodi ziko ngazi moja chini ya nodi nyingine ni tanzu kuhusiana na nodi hii. Nodi ambazo ziko katika kiwango sawa na zina mzazi sawa huitwa dada. Nodi ziko idadi yoyote ya viwango chini ya nodi nyingine ni watoto wake. Mzazi, babu, na nodi nyingine yoyote juu ya nodi fulani ni mababu zake.

Kila mstatili katika mchoro huu ni nodi ya hati, ambayo inawakilishwa na kitu cha Node. Kumbuka kwamba takwimu inaonyesha aina tatu tofauti za nodes. Mzizi wa mti ni nodi ya Hati, ambayo inawakilisha hati nzima. Nodi zinazowakilisha vipengele vya HTML ni nodi za aina ya Kipengele, na nodi zinazowakilisha maandishi ni nodi za aina ya Maandishi. Hati, Kipengele na Maandishi ni aina ndogo za darasa la Node. Hati na Kipengele ni madarasa mawili muhimu zaidi katika DOM.

Aina ya Nodi na aina zake ndogo huunda aina ya daraja iliyoonyeshwa kwenye mchoro hapa chini. Kumbuka tofauti rasmi kati ya aina za kawaida za Hati na Kipengele, na aina za HTMLDocument na HTMLElement. Aina ya Hati inawakilisha hati ya HTML na XML, na darasa la Element inawakilisha kipengele cha hati hiyo. Sehemu ndogo za HTMLDocument na HTMLElement zinawakilisha hati ya HTML na vipengee vyake:

Jambo lingine la kuzingatia katika mchoro huu ni kwamba kuna idadi kubwa ya aina ndogo za darasa la HTMLElement ambazo zinawakilisha aina maalum za vipengele vya HTML. Kila mmoja wao anafafanua sifa za JavaScript zinazoonyesha sifa za HTML za kipengele fulani au kikundi cha vipengele. Baadhi ya madarasa haya mahususi yanafafanua sifa au mbinu za ziada ambazo haziakisi sintaksia ya lugha ya mwanya ya HTML.

Kuchagua vipengele vya hati

Kazi ya programu nyingi za mteja katika lugha ya JavaScript inahusiana kwa namna fulani na uendeshaji wa vipengele vya hati. Wakati wa utekelezaji, programu hizi zinaweza kutumia hati ya kutofautisha ya kimataifa, ambayo inarejelea kitu cha Hati. Hata hivyo, ili kufanya udanganyifu wowote kwenye vipengele vya hati, programu lazima kwa namna fulani ipate, au ichague, Vipengee vya Kipengele vinavyorejelea vipengele hivyo vya hati. DOM inafafanua njia kadhaa za kuchagua vipengele. Unaweza kuchagua kipengele au vipengele vya hati:

    kwa thamani ya sifa ya kitambulisho;

    kwa thamani ya sifa ya jina;

    kwa jina la lebo;

    kwa darasa la CSS au jina la darasa;

    kwa kulinganisha kiteuzi mahususi cha CSS.

Mbinu hizi zote za sampuli za vipengele zimeelezwa katika vifungu vifuatavyo.

Kuchagua vipengele kwa thamani ya sifa ya kitambulisho

Vipengele vyote vya HTML vina sifa za kitambulisho. Thamani ya sifa hii lazima iwe ya kipekee ndani ya hati—hakuna vipengele viwili katika hati sawa lazima ziwe na thamani sawa ya kitambulisho. Unaweza kuchagua kipengee kwa thamani ya kitambulisho cha kipekee kwa kutumia njia ya getElementById() ya kitu cha Hati:

Var section1 = document.getElementById("section1");

Hii ndiyo njia rahisi na ya kawaida ya kuchagua vipengele. Ikiwa hati yako inahitaji kuwa na uwezo wa kudhibiti seti maalum ya vipengele vya hati, toa thamani kwa sifa za kitambulisho za vipengele hivyo na utumie uwezo wa kuvitafuta kwa kutumia thamani hizo.

Katika matoleo ya Internet Explorer mapema kuliko IE8, njia ya getElementById() hutafuta thamani za sifa za kitambulisho kwa njia isiyojali kisa na pia hurejesha vipengele vinavyolingana na thamani ya sifa ya jina.

Kuchagua vipengele kwa thamani ya sifa ya jina

Jina la sifa ya HTML lilikusudiwa awali kutaja vipengele vya fomu, na thamani ya sifa hii ilitumiwa wakati data ya fomu iliwasilishwa kwa seva. Kama sifa ya kitambulisho, sifa ya jina hutoa jina kwa kipengele. Hata hivyo, tofauti na kitambulisho, thamani ya sifa ya jina si lazima iwe ya kipekee: vipengele kadhaa vinaweza kuwa na jina moja, ambalo ni la kawaida kabisa linapotumiwa katika aina za vifungo vya redio na visanduku vya kuteua. Zaidi ya hayo, tofauti na kitambulisho, sifa ya jina inaruhusiwa tu kwenye vipengele fulani vya HTML, ikiwa ni pamoja na fomu, vipengele vya fomu, na .

Unaweza kuchagua vipengee vya HTML kulingana na maadili ya sifa za majina yao kwa kutumia getElementsByName() mbinu ya kitu cha Hati:

Var radiobuttons = document.getElementsByName("favorite_color");

Njia ya getElementsByName() haijafafanuliwa na darasa la Hati, lakini na darasa la HTMLDocument, kwa hivyo inapatikana katika hati za HTML pekee na haipatikani katika hati za XML. Inarudisha kitu cha NodeList, ambacho hufanya kama safu ya kusoma tu ya vitu vya Element.

Katika IE, njia ya getElementsByName() pia hurejesha vipengele ambavyo thamani ya sifa ya kitambulisho inalingana na thamani iliyobainishwa. Ili kuhakikisha upatanifu wa kivinjari, lazima uwe mwangalifu wakati wa kuchagua maadili ya sifa na usitumie mifuatano sawa na maadili ya jina na sifa za kitambulisho.

Chagua vitu kwa aina

Mbinu ya getElementsByTagName() ya kitu cha Hati hukuruhusu kuchagua vipengele vyote vya HTML au XML vya aina maalum (au kwa jina la lebo). Kwa mfano, unaweza kupata kitu cha kusoma-safu-kama kilicho na vitu vya Kipengele cha vitu vyote kwenye hati kama hii:

Var spans = document.getElementsByTagName("span");

Sawa na njia ya getElementsByName(), getElementsByTagName() inarudisha kipengee cha NodeList. Vipengele vya hati vimejumuishwa katika safu ya NodeList kwa mpangilio sawa ambao wanaonekana kwenye hati, i.e. kipengele cha kwanza

Katika hati unaweza kuchagua:

Var firstParagraph = document.getElementsByTagName("p");

Majina ya lebo za HTML si nyeti kwa herufi, na getElementsByTagName() inapotumika kwa hati ya HTML, hufanya ulinganisho usiojali kesi dhidi ya jina la lebo. Tofauti ya spans iliyoundwa hapo juu, kwa mfano, pia itajumuisha vipengele vyote vilivyoandikwa kama .

Unaweza kupata NodeList iliyo na vipengee vyote vya hati kwa kupitisha herufi "*" kwa njia ya getElementsByTagName().

Kwa kuongezea, darasa la Element pia linafafanua njia ya getElementsByTagName(). Inafanya kazi sawa na toleo la darasa la Hati la mbinu, lakini huchagua tu vitu ambavyo ni vizazi vya kipengee ambacho njia hiyo inaitwa. Hiyo ni, pata vipengele vyote ndani ya kipengele cha kwanza

Unaweza kufanya hivi kama ifuatavyo:

Var firstParagraph = document.getElementsByTagName("p"); var firstParagraphSpans = firstParagraph.getElementsByTagName("span");

Kwa sababu za kihistoria, darasa la HTMLDocument linafafanua sifa maalum za kufikia aina fulani za nodi. Mali Picha, fomu Na viungo, kwa mfano, rejelea vitu vinavyofanya kazi kama safu za kusoma tu zenye vipengele , Na (lakini vitambulisho hivyo tu , ambazo zina sifa ya href). Sifa hizi hurejelea vitu vya HTMLCollection, ambavyo ni kama vitu vya NodeList, lakini vinaweza pia kuorodheshwa na maadili ya kitambulisho na sifa za jina.

Kipengee cha HTMLDocument pia kinafafanua sifa sawa za upachikaji na programu-jalizi, ambazo ni mikusanyiko ya vipengele vya HTMLCollection. Mali ya nanga sio ya kawaida, lakini inaweza kutumika kufikia vipengele , ambayo ina sifa ya jina lakini haina sifa ya href. Sifa ya hati inafafanuliwa na kiwango cha HTML5 na ni mkusanyiko wa vipengee vya Mkusanyiko wa HTML.

Zaidi ya hayo, kitu cha HTMLDocument kinafafanua sifa mbili, ambayo kila moja inarejelea sio mkusanyiko, lakini kipengele kimoja. Sifa ya document.body inawakilisha kipengele cha hati ya HTML, na kipengele cha document.head kinawakilisha . Sifa hizi hufafanuliwa kila wakati kwenye hati: hata ikiwa hati ya chanzo haina na vipengee, kivinjari kitaunda kwa ukamilifu. Kipengele cha hati cha kitu cha Hati kinarejelea kipengele cha msingi cha hati. Katika hati za HTML daima inawakilisha .

Kuchagua vipengele kwa darasa la CSS

Thamani ya sifa ya darasa la HTML ni orodha ya vitambulishi sifuri au zaidi, ikitenganishwa na nafasi. Inakuruhusu kufafanua seti za vipengele vya hati vinavyohusiana: vipengele vyovyote vilivyo na kitambulisho sawa katika sifa ya darasa ni sehemu ya seti sawa. Darasa la neno limehifadhiwa katika JavaScript, kwa hivyo JavaScript ya upande wa mteja hutumia sifa ya className kuhifadhi thamani ya sifa ya darasa la HTML.

Kwa kawaida sifa ya darasa hutumiwa pamoja na laha za mtindo wa CSS ili kutumia mtindo wa kawaida wa uwasilishaji kwa washiriki wote wa seti. Hata hivyo, kwa kuongeza, kiwango cha HTML5 kinafafanua mbinu ya getElementsByClassName(), ambayo inakuwezesha kuchagua vipengele vingi vya hati kulingana na vitambulisho katika sifa za darasa lao.

Kama vile njia ya getElementsByTagName() , njia ya getElementsByClassName() inaweza kuitwa kwenye hati za HTML na vipengele vya HTML, na kurejesha kitu cha moja kwa moja cha NodeList kilicho na vizazi vyote vya hati au kipengele kinacholingana na vigezo vya utafutaji.

Njia ya getElementsByClassName() inachukua hoja ya mfuatano mmoja, lakini mfuatano wenyewe unaweza kuwa na vitambulishi vingi, vikitenganishwa na nafasi. Vipengele vyote ambavyo sifa zake za darasa zina vitambulishi vyote vilivyobainishwa vitazingatiwa kuwa vinalingana. Mpangilio wa vitambulisho haijalishi. Kumbuka kuwa katika sifa ya darasa na hoja ya njia ya getElementsByClassName(), vitambulishi vya darasa vinatenganishwa na nafasi badala ya koma.

Ifuatayo ni baadhi ya mifano ya kutumia getElementsByClassName() mbinu:

// Tafuta vipengele vyote vilivyo na darasa la "onyo" var warning = document.getElementsByClassName("onyo"); // Tafuta vizazi vyote vya kipengele kilicho na vitambulisho "logi" // na madarasa "kosa" na "fatal" var log = document.getElementById("logi"); var fatal = log.getElementsByClassName("kosa mbaya");

Kuchagua Vipengele Kwa Kutumia Viteuzi vya CSS

Laha za Mtindo wa CSS zina miundo yenye nguvu sana ya kisintaksia inayojulikana kama viteuzi vinavyokuruhusu kuelezea vipengele au seti za vipengele katika hati. Pamoja na kusawazisha viteuzi vya CSS3, kiwango kingine cha W3C kinachojulikana kama API ya Viteuzi hufafanua mbinu za JavaScript za kurejesha vipengele vinavyolingana na kiteuzi mahususi.

Ufunguo wa API hii ni njia ya querySelectorAll() ya kitu cha Hati. Inachukua hoja ya mfuatano mmoja na kiteuzi cha CSS na kurudisha kitu cha NodeList kinachowakilisha vipengele vyote vya hati vinavyolingana na kiteuzi.

Kwa kuongezea njia ya querySelectorAll(), kitu cha hati pia kinafafanua querySelector() mbinu, ambayo ni sawa na querySelectorAll() isipokuwa inarudisha tu kipengele cha kwanza (kwa mpangilio wa hati) kinacholingana, au kubatilisha ikiwa hakuna vipengele vinavyolingana. .

Njia hizi mbili pia zinafafanuliwa na darasa la Vipengele. Zinapoitwa kwenye kipengele, hati nzima hutafutwa kwa ajili ya inayolingana na kiteuzi kilichotolewa, na kisha matokeo huchujwa ili kujumuisha tu vizazi vya kipengele kilichotumiwa. Mbinu hii inaweza kuonekana kuwa isiyofaa kwa sababu ina maana kwamba mfuatano wa kiteuzi unaweza kujumuisha mababu ya kipengele kinacholinganishwa.

Muundo wa hati na urambazaji wa hati

Baada ya kuchagua kipengele cha hati, wakati mwingine ni muhimu kupata sehemu zinazohusiana na muundo wa hati (mzazi, ndugu, mtoto). Kitu cha Hati kinaweza kuzingatiwa kama mti wa vitu vya Node. Aina ya Node inafafanua mali ambayo hukuruhusu kuzunguka mti kama huo. Kuna kiolesura kingine cha programu kwa urambazaji wa hati, kama vile mti wa kitu cha Element.

Hati kama miti ya nodi

Kitu cha Hati, vipengee vyake vya Kipengele, na vitu vya Maandishi vinavyowakilisha vipande vya maandishi kwenye hati vyote ni vitu vya Node. Darasa la Node linafafanua sifa zifuatazo muhimu:

parentNodi

Nodi kuu ya nodi hii, au null kwa nodi ambazo hazina mzazi, kama vile Hati.

nodi za watoto

Kitu kinachoweza kusomeka kama safu (NodeList) ambacho hutoa uwakilishi wa nodi za watoto.

Mtoto wa kwanza, Mtoto wa mwisho

Nodi za mtoto wa kwanza na wa mwisho, au null ikiwa nodi iliyotolewa haina nodi za watoto.

nextNdugu, Ndugu wa awali

Nodi za kaka zinazofuata na zilizopita. Nodi za ndugu ni nodi mbili ambazo zina mzazi mmoja. Utaratibu ambao wanaonekana unafanana na utaratibu katika waraka. Sifa hizi huunganisha nodi kwenye orodha iliyounganishwa mara mbili.

nodiAina

Aina ya nodi hii. Nodi za aina ya Hati zina thamani ya 9 katika mali hii. Nodi za aina Kipengele - thamani 1. Nodi za maandishi za aina Nakala - thamani 3. Nodi za aina Maoni - thamani 8 na nodi za aina DocumentFragment - thamani 11.

nodiThamani

Maudhui ya maandishi ya nodi za Maandishi na Maoni.

nodeName

Jina la lebo ya Kipengele kilicho na herufi zote zilizobadilishwa kuwa herufi kubwa.

Kwa kutumia mali hizi za darasa la Node, unaweza kurejelea nodi ya pili ya mtoto ya nodi ya kwanza ya kitu cha Hati, kama inavyoonyeshwa hapa chini:

Document.childNodes.childNodes == document.firstChild.firstChild.nextSibling

Wacha tufikirie kuwa hati inayohusika ina fomu ifuatayo:

TestHello Dunia!

Kisha nodi ya pili ya mtoto ya nodi ya mtoto wa kwanza itakuwa kipengele. Katika nodeType mali ina thamani 1 na katika nodeName mali ina thamani "BODY".

Walakini, kumbuka kuwa API hii ni nyeti sana kwa mabadiliko katika maandishi ya hati. Kwa mfano, ukiongeza mlisho wa mstari mmoja kati ya na tagi kwenye hati hii, herufi hiyo ya mlisho wa laini inakuwa nodi ya kwanza ya mtoto (Nodi ya maandishi) ya nodi ya mtoto wa kwanza, na nodi ya mtoto ya pili inakuwa kipengele, si .

Nyaraka kama kipengele miti

Wakati masilahi ya msingi ni katika vipengee vya hati vyenyewe, badala ya maandishi ndani yao (na nafasi nyeupe kati yao), ni rahisi zaidi kutumia kiolesura cha programu ambacho hukuruhusu kutafsiri hati kama mti wa vitu vya Kipengele. , kupuuza nodi za Maandishi na Maoni ambazo pia ni sehemu ya hati.

Sehemu ya kwanza ya kiolesura hiki cha programu ni mali ya watoto ya vitu vya Element. Kama mali ya mtoto, thamani yake ni kitu cha NodeList. Walakini, tofauti na mali ya Nodi za watoto, orodha ya watoto ina vitu vya Element pekee.

Kumbuka kwamba nodi za Maandishi na Maoni hazina nodi za watoto. Hii ina maana kwamba kipengele cha Node.parentNode kilichoelezwa hapo juu hakirudishi nodi za aina ya Maandishi au Maoni. Thamani ya kipengele cha parentNodi ya kitu chochote cha Kipengele daima itakuwa kitu kingine cha Kipengele au mzizi wa mti - kitu cha Hati au Hati.

Sehemu ya pili ya kiolesura cha maombi ya vitu vya kuvinjari hati ni mali ya kitu cha Element, sawa na mali ya kupata nodi za watoto na ndugu za kitu cha Node:

firstElementChild, lastElementChild

Sawa na mali ya Mtoto wa kwanza na ya Mtoto wa mwisho, lakini rudisha vipengele vya mtoto.

nextElementSibling, previousElementSibling

Sawa na sifa ya pili ya Ndugu na Sibling iliyotangulia, lakini rudisha vipengele vya kaka.

childElementCount

Idadi ya vipengele vya watoto. Hurejesha thamani sawa na mali ya children.length.

Sifa hizi za ufikiaji wa vipengele vya watoto na ndugu zimesawazishwa na kutekelezwa katika vivinjari vyote vya sasa isipokuwa IE.

Katika somo hili, tutaangalia DOM ni nini, kwa nini inahitajika, na jinsi inavyojengwa.

DOM ni nini?

Wakati kivinjari kinaomba ukurasa na kupokea msimbo wake wa chanzo cha HTML kwa kujibu kutoka kwa seva, lazima kwanza ichanganue. Katika mchakato wa kuchambua na kuchanganua msimbo wa HTML, kivinjari hujenga mti wa DOM kulingana na hilo.

Baada ya kukamilisha kitendo hiki na idadi ya nyingine, kivinjari huanza kutoa ukurasa. Katika mchakato huu, yeye, bila shaka, tayari anatumia mti wa DOM aliounda, na sio msimbo wa awali wa HTML.

DOM ni kielelezo cha kitu cha hati ambacho kivinjari huunda kwenye kumbukumbu ya kompyuta kulingana na msimbo wa HTML unaopokea kutoka kwa seva.

Ili kuiweka kwa urahisi, msimbo wa HTML ni maandishi ya ukurasa, na DOM ni seti ya vitu vinavyohusiana vilivyoundwa na kivinjari wakati wa kuchanganua maandishi yake.

Katika Chrome, msimbo wa chanzo wa ukurasa ambao kivinjari hupokea unaweza kutazamwa kwenye kichupo cha "Chanzo" kwenye paneli ya "Zana za Wasanidi Programu".


Chrome haina zana ambayo unaweza kutazama mti wa DOM ambayo huunda. Lakini kuna uwakilishi wa mti huu wa DOM kwa namna ya msimbo wa HTML, unapatikana kwenye kichupo cha "Elements". Uwakilishi huu wa DOM, bila shaka, ni rahisi zaidi kwa msanidi programu kufanya kazi naye. Kwa hivyo, hakuna zana ambayo ingewakilisha DOM kama muundo wa mti.


Vitu katika mtindo huu huundwa kutoka kwa karibu kila kitu kilicho katika HTML (vitambulisho, maudhui ya maandishi, maoni, nk), ikiwa ni pamoja na hati yenyewe. Uhusiano kati ya vitu hivi kwenye modeli huundwa kulingana na jinsi vipengele vya HTML vimewekwa kuhusiana na kila mmoja katika msimbo.

Katika kesi hii, DOM ya hati baada ya malezi yake inaweza kubadilishwa. Wakati DOM inabadilika, kivinjari karibu huchora upya picha ya ukurasa mara moja. Kwa hivyo, utoaji wetu wa ukurasa kila wakati unalingana na DOM.

Ili kusoma na kubadilisha DOM kwa utaratibu, kivinjari hutupa API ya DOM au, kwa maneno mengine, kiolesura cha programu. Kwa ufupi, API ya DOM ni mkusanyiko wa idadi kubwa ya vitu tofauti, mali zao na njia ambazo tunaweza kutumia kusoma na kubadilisha DOM.

Kufanya kazi na DOM, JavaScript hutumiwa katika hali nyingi, kwa sababu ... Leo ndio lugha pekee ya programu ambayo maandishi yanaweza kutekelezwa kwenye kivinjari.

Kwa nini tunahitaji API ya DOM? Tunaihitaji ili tuweze kutumia JavaScript kubadili ukurasa kwenye kuruka, i.e. ifanye iwe ya nguvu na maingiliano.

API ya DOM hutupatia (watengenezaji) idadi kubwa ya mbinu ambazo kwazo tunaweza kubadilisha kila kitu kwenye ukurasa, na pia kuingiliana na mtumiaji. Wale. kiolesura hiki cha programu hutuwezesha kuunda miingiliano tata, fomu, kuchakata vitendo vya mtumiaji, kuongeza na kuondoa vipengele mbalimbali kwenye ukurasa, kubadilisha yaliyomo, mali (sifa), na mengi zaidi.

Siku hizi hakuna tovuti kwenye wavuti ambazo hali zao hazitafanya kazi na DOM.

Je, msimbo wa HTML wa ukurasa unajumuisha nini?

Kabla ya kuendelea na kusoma mfano wa kitu cha hati, lazima kwanza ukumbuke nini msimbo wa chanzo wa ukurasa wa wavuti (hati ya HTML) ni.

Msimbo wa chanzo wa ukurasa wa wavuti unajumuisha lebo, sifa, maoni na maandishi. Lebo ni muundo msingi wa kisintaksia wa HTML. Wengi wao wameunganishwa. Katika kesi hii, mmoja wao anafungua na mwingine anafunga. Jozi moja ya vitambulisho huunda kipengele cha HTML. Vipengele vya HTML vinaweza kuwa na vigezo vya ziada - sifa.

Katika hati, ili kuunda markup fulani, vipengele vingine viko ndani ya wengine. Kwa hivyo, hati ya HTML inaweza kuwakilishwa kama seti ya vipengele vya HTML vilivyowekwa ndani ya kila mmoja.

Kama mfano, fikiria nambari ifuatayo ya HTML:

Jina la ukurasa Jina la kifungu Sehemu ya kifungu

Yaliyomo katika makala

Katika msimbo huu, kipengele cha mizizi ni html. Ina vipengele vya kichwa na mwili. Kipengele cha kichwa kina kichwa, na mwili una h1 na div. Kipengele cha div kwa upande wake kina h2 na p .

Sasa hebu tuangalie jinsi kivinjari hujenga mti wa DOM kulingana na msimbo wa HTML.

Je, mti wa DOM wa hati umeundwaje?

Kama ilivyoelezwa hapo juu, kivinjari huunda mti kulingana na vipengele vya HTML na vyombo vingine vya msimbo wa chanzo cha ukurasa. Wakati wa kufanya mchakato huu, inazingatia uwekaji wa vitu ndani ya kila mmoja.

Kama matokeo, kivinjari hutumia mti wa DOM unaosababishwa sio tu katika kazi yake, lakini pia hutupatia API ya kufanya kazi nayo kwa urahisi kupitia JavaScript.

Wakati wa kuunda DOM, kivinjari huunda vitu (nodi za miti ya DOM) kutoka kwa vipengele vya HTML, maandishi, maoni na vyombo vingine vya lugha hii.

Mara nyingi, watengenezaji wa wavuti wanavutiwa tu na vitu (nodi) iliyoundwa kutoka kwa vipengee vya HTML.

Wakati huo huo, kivinjari sio tu huunda vitu kutoka kwa vipengele vya HTML, lakini pia huwaunganisha kwa kila mmoja na uhusiano fulani, kulingana na jinsi kila mmoja wao anavyohusiana na mwingine katika kanuni.

Vipengele ambavyo viko moja kwa moja katika kipengele fulani ni watoto kuhusiana nayo. Na yeye ni mzazi kwa kila mmoja wao. Kwa kuongeza, vipengele hivi vyote ni ndugu (ndugu) kuhusiana na kila mmoja.

Aidha, katika HTML, kipengele chochote huwa na mzazi mmoja (kipengele cha HTML ambacho kinapatikana moja kwa moja). Katika HTML, kipengele hakiwezi kuwa na wazazi wengi. Isipokuwa tu ni kipengee cha html. Hana mzazi.

Ili kupata mti wa DOM kama kivinjari kinavyojenga, unahitaji tu "kupanga" vipengele vyote kulingana na uhusiano wao kwa kila mmoja.

Uundaji wa mti wa DOM unafanywa kutoka juu hadi chini.

Katika kesi hii, mzizi wa mti wa DOM daima ni hati yenyewe (nodi ya hati). Ifuatayo, mti hujengwa kulingana na muundo wa msimbo wa HTML.

Kwa mfano, nambari ya HTML tuliyoangalia hapo juu ingekuwa na mti ufuatao wa DOM:


Juu kabisa ya mti huu ni nodi ya hati. Nodi hii inahusishwa na html, ni mtoto wake. Nodi ya html inaundwa na kipengele cha html (...). Nodi za kichwa(...) na body(...) zina uhusiano wa mzazi na html. Kuhusiana na kila mmoja, wao ni ndugu, kwa sababu kuwa na mzazi mmoja. Nodi ya kichwa inahusishwa na kichwa (lt; title>...), ni mtoto wake. Nodi za h1 na div zinahusishwa na body , ambayo ni mzazi wao. Nodi ya div imeunganishwa na h2(...) na p(), ni watoto wake.

Mti huanza, kama ilivyoonyeshwa hapo juu, na kitu cha hati (nodi). Kwa upande wake ina nodi moja ya mtoto iliyoundwa na kipengee cha html (...). Vipengee vya kichwa(...) na mwili(...) viko katika html na kwa hivyo ni watoto wake. Ifuatayo, nodi ya kichwa ni mzazi wa kichwa (lt; kichwa>...). Vipengele vya h1 na div vimewekwa ndani ya mwili, kumaanisha kuwa ni watoto wake. Div moja kwa moja ina vipengele h2 (...) na p (). Hii inamaanisha kuwa nodi ya div kwa kila mmoja wao ni mzazi.

Hivi ndivyo ilivyo rahisi kujenga mti wa DOM kwenye kivinjari kulingana na msimbo wa HTML.

Kwa nini unahitaji kujua jinsi mti wa DOM umejengwa? Kwanza, ni ufahamu wa mazingira ambayo unataka kubadilisha kitu. Pili, vitendo vingi wakati wa kufanya kazi na DOM huja chini kwa kutafuta (kuchagua) vitu muhimu. Bila kujua jinsi mti wa DOM umeundwa na viunganisho kati ya nodi, itakuwa ngumu sana kupata kipengee maalum ndani yake.

Zoezi

Kulingana na mti wa DOM ulioonyeshwa kwenye takwimu, unda msimbo wa HTML.



Mfano wa Kitu cha Hati, au "DOM", ni kiolesura cha programu cha kufikia vipengele vya kurasa za wavuti. Kimsingi, ni API ya ukurasa inayokuruhusu kusoma na kudhibiti yaliyomo, muundo, na mitindo ya ukurasa. Wacha tujue jinsi inavyofanya kazi na jinsi inavyofanya kazi.

Je, ukurasa wa wavuti hujengwaje?

Mchakato wa kubadilisha hati asili ya HTML kuwa ukurasa unaoweza kutolewa, mtindo na mwingiliano unaitwa "Njia Muhimu ya Utoaji". Ingawa mchakato huu unaweza kugawanywa katika hatua kadhaa, kama nilivyoeleza katika Kuelewa Njia Muhimu ya Utoaji, hatua hizi zinaweza kugawanywa katika vikundi viwili. Katika kwanza, kivinjari huchanganua hati ili kuamua ni nini kitakachoonyeshwa kwenye ukurasa, na kwa pili, kivinjari hufanya utoaji.

Matokeo ya hatua ya kwanza ni kile kinachoitwa "mti wa kutoa". Mti unaoonyesha ni uwakilishi wa vipengele vya HTML ambavyo vitatolewa kwenye ukurasa na mitindo inayohusiana nayo. Ili kuunda mti huu, kivinjari kinahitaji vitu viwili:

  • CSSOM, inayowakilisha mitindo inayohusishwa na vipengele
  • DOM, uwakilishi wa kipengele
  • Je, DOM inajumuisha nini?

    DOM ni uwakilishi wa kitu cha hati asili ya HTML. Ina tofauti fulani, kama tutakavyoona hapa chini, lakini kimsingi ni jaribio la kubadilisha muundo na maudhui ya hati ya HTML kuwa kielelezo cha kitu ambacho kinaweza kutumiwa na programu mbalimbali.

    Muundo wa vitu vya DOM unawakilishwa na kile kinachoitwa "mti wa nodi". Inaitwa hivyo kwa sababu inaweza kudhaniwa kuwa mti wenye mzazi mmoja ambao una matawi katika matawi kadhaa ya watoto, ambayo kila moja linaweza kuwa na majani. Katika kesi hii, "kipengele" cha mzazi ni kipengele cha mizizi, "matawi" ya mtoto ni vipengele vilivyowekwa, na "majani" ni yaliyomo ndani ya vipengele.

    Wacha tuchukue hati hii ya HTML kama mfano:

    Ukurasa wangu wa kwanza wa wavuti Hujambo, ulimwengu!

    Habari yako?

    Hati hii inaweza kuwakilishwa kama mti ufuatao wa nodi:

    • html
      • kichwa
        • kichwa
          • Ukurasa wangu wa kwanza wa wavuti
      • mwili
        • h1
          • Salamu, Dunia!
        • uk
          • Habari yako?
    Nini DOM sio

    Katika mfano ulio hapo juu, inaonekana kwamba DOM ni ramani ya 1:1 ya hati asili ya HTML. Walakini, kama nilivyosema hapo awali, kuna tofauti. Ili kuelewa kikamilifu DOM ni nini, tunahitaji kuangalia ni nini sio.

    DOM si nakala ya HTML asili

    Ingawa DOM imeundwa kutoka kwa hati ya HTML, sio sawa kila wakati. Kuna matukio mawili ambayo DOM inaweza kutofautiana na chanzo cha HTML.

    1. Wakati HTML ina makosa ya ghafi

    DOM ni kiolesura cha kufikia vipengele halisi (yaani, vilivyotolewa tayari) vya hati ya HTML. Wakati wa mchakato wa kuunda DOM, kivinjari chenyewe kinaweza kusahihisha baadhi ya makosa katika msimbo wa HTML.

    Fikiria hati hii ya HTML kama mfano:

    Salamu, Dunia!

    Hati haina vipengele na , ambayo ni hitaji la HTML. Lakini ikiwa tutaangalia mti wa DOM unaosababishwa, tunaweza kuona kuwa hii imesasishwa:

    • html
      • kichwa
      • mwili
        • Salamu, Dunia!
      2. Wakati DOM inarekebishwa na msimbo wa Javascript

      Mbali na kuwa kiolesura cha kutazama yaliyomo kwenye hati ya HTML, DOM yenyewe pia inaweza kurekebishwa.

      Tunaweza, kwa mfano, kuunda nodi za ziada za DOM kwa kutumia Javascript.

      Var newParagraph = document.createElement("p"); var paragraphContent = document.createTextNode("Mimi ni mpya!"); newParagraph.appendChild(abaraYaliyomo); document.body.appendChild(newParagraph);

      Msimbo huu utabadilisha DOM, lakini mabadiliko hayataonekana kwenye hati ya HTML.

      DOM sio kile unachokiona kwenye kivinjari (yaani mti wa kutoa)

      Kwenye eneo la kutazama la kivinjari unaona mti wa kutoa, ambao kama nilivyosema ni mchanganyiko wa DOM na CSSOM. Ni nini tofauti kuhusu DOM na mti wa kutoa ni kwamba mwisho unajumuisha tu kile ambacho hatimaye kitatolewa kwenye skrini.

      Kwa sababu mti wa kutoa unahusiana tu na kile kinachotolewa, haijumuishi vipengele ambavyo vimefichwa. Kwa mfano, vipengele ambavyo vina mitindo yenye onyesho: none .

      Salamu, Dunia!

      Habari yako?

      DOM itajumuisha kipengele

      • html
        • kichwa
        • mwili
          • h1
            • Salamu, Dunia!
          • uk
            • Habari yako?

      Walakini, mti wa kutoa, na kwa hivyo kile kinachoonekana kwenye tovuti ya kutazama, haitajumuishwa kwenye kipengee hiki.

      • html
        • mwili
          • h1
            • Salamu, Dunia!
      DOM sio kile kinachoonyeshwa kwenye DevTools

      Tofauti hii ni ndogo kidogo kwa sababu Kikaguzi cha Kipengele cha DevTools hutoa ukadiriaji wa karibu zaidi wa DOM ambao tunayo kwenye kivinjari. Walakini, mkaguzi wa DevTools ana maelezo ya ziada ambayo hayapo kwenye DOM.

      Mfano bora wa hii ni CSS pseudo-elements. Vipengele vya uwongo vilivyoundwa kwa kutumia ::before na ::baada ya viteuzi ni sehemu ya CSSOM na mti wa uwasilishaji, lakini si sehemu ya kitaalam ya DOM. Hii ni kwa sababu DOM imeundwa kutoka kwa hati asili ya HTML pekee, bila kujumuisha mitindo inayotumika kwa kipengee.

      Ingawa vipengele bandia si sehemu ya DOM, vipo katika mkaguzi wetu wa vipengele vya devtools.


      Muhtasari

      DOM ni kiolesura cha hati ya HTML. Inatumiwa na vivinjari kama hatua ya kwanza katika kubainisha cha kutoa kwenye tovuti ya kutazama, na kwa msimbo wa Javascript kubadilisha maudhui, muundo, au mtindo wa ukurasa.

    Chapisho hili linatanguliza mfululizo wa makala kuhusu njia mbadala za kufanya kazi na XML. "Mbadala" kwa sababu, kama sheria, kufanya kazi na XML katika 1C ni mdogo kwa kuchanganua xml kwa kutumia usomaji wa mtiririko - uchanganuzi wa maandishi kwa mstari kwa mstari. Lakini kuna njia nyingine.

    Kwa mfano, kutumia violezo vya mabadiliko ya lugha ya XML ya xPath au XSL. Chaguzi hizi zitajadiliwa katika makala zijazo. Lakini zote zinategemea uwakilishi wa msingi wa DOM wa hati za XML. Nini DOM (mfano wa kitu cha hati) itajadiliwa katika uchapishaji.

    DOM inategemea uwakilishi wa hati ya muundo wowote kwa namna ya mti wa nodi, kila nodi (nodi) ambayo inawakilisha kipengele, sifa ya kipengele, thamani ya maandishi ya kipengele, nk. nodi zimejengwa juu ya kanuni ya "mzazi - wasaidizi". Mzizi wa hati (mti wa DOM) hauna mzazi. Kipengele cha mwisho hakina mtoto (vitu kama hivyo huitwa abstractly majani ya mti). Kwa hivyo, DOM inaweza kuundwa sio tu kwa XML, lakini kwa karibu hati yoyote iliyopangwa (HTML, XHTML). Kwa hiyo, kwa mfano, kivinjari cha mtumiaji, kupokea msimbo wa HTML wa ukurasa wa wavuti kutoka kwenye mtandao, hujenga mti wa DOM wa ukurasa huu kwenye RAM ya kompyuta ya mtumiaji.

    DOM inafungua uwezekano mkubwa wa kudhibiti data ya hati. Unaweza kuunda nodes mpya, kuziingiza kwenye viwango tofauti vya miti, nodes za nakala, kufuta nodes, kutafuta nodes kwa kutumia vigezo tofauti, na mengi zaidi.

    Muundo wa DOM wa hati ya XML unaonyeshwa kwenye mchoro ulio hapa chini.

    Lugha yoyote ya kisasa ya programu inajumuisha zana (parers) za kufanya kazi na mti kama huo. Inapokea maudhui ya mfuatano kama ingizo, kichanganuzi cha XML huunda mti wa nodi kwenye RAM na kufanya upotoshaji na data ya mti. Faida ya mbinu hii juu ya uchanganuzi wa mstari kwa mstari ni dhahiri: kwa swali moja kwa mti unaweza kuchagua data muhimu bila kupitia mstari mzima wa hati kwa mstari, kwa sababu RAM ina uwakilishi kamili wa vipengele na vipengele vyote. mahusiano.

    Katika jukwaa la 1C, mfano wa DOM unawakilishwa na kitu maalum DocumentDOM, ambayo kwa upande wake hujengwa kwa kutumia kitu cha BuilderDOM na njia yake ya Kusoma. Ingizo la mbinu hii kwa kawaida huwa ni Kisomaji cha XML au kipengee cha HTML Reader, ambacho husoma moja kwa moja maudhui ya maandishi ya XML au HTML kutoka kwa faili au kuyapakia kutoka kwa mfuatano. Kweli, basi kuna idadi ya miundo ambayo hukuruhusu kutoa data kutoka kwa mfano wa kitu cha hati iliyosomwa.

    Kati ya chaguzi zote, ya kuvutia zaidi kutoka kwa mtazamo wangu ni chaguo No 1 kwa kutumia njia ya CalculateXPathExpression. Makala inayofuata itatolewa kwake.

    Manufaa ya uchanganuzi wa mstari kwa mstari: hitaji la rasilimali ni kidogo. Hasara: inachukua muda mrefu kupata data, unahitaji kusoma mstari mzima wa faili kwa mstari, ugumu wa msimbo wa programu wakati wa kuunganisha nyaraka za XML na muundo tata.

    Faida ya sampuli kupitia DOM: kasi ya sampuli ya data, unyenyekevu wa msimbo wa programu. Hasara: kudai rasilimali; ujenzi na maswali kwa DOM hutumia RAM na nguvu ya usindikaji.