Kuo u ‘i he fakalakalaka ‘o e front-end ‘o fuoloa fe’unga ke sio ki ha founga ‘i he ngaahi ta’u: kau developers kei talavou ange ‘oku nau ngaue mo ha paradigm fo’ou ‘o e polokalama ‘o ‘ikai mahino kiate kinautolu ‘a e tu’unga fakahisitolia ‘o ia. Ko e mo‘oni, ‘oku mahino haohaoa ‘a e ‘ikai ke ‘ilo‘i ha me‘a. Ko e uepi ko e feitu’u lahi ‘aupito ia ‘oku kehekehe ‘a e ngaahi taukei mo e ngaahi me’a makehe, pea ‘oku ‘ikai ke tau ‘ilo ma’u pe ‘a e me’a ‘oku ‘ikai ke tau ‘ilo. Ko e ako ʻi he malaʻe ko ʻení ko ha fononga hokohoko ia kae ʻikai ko ha meʻa ʻoku hoko tuʻo taha pē pea ʻosi. Keisi 'i he poini: Na'e 'eke mai 'e ha taha 'i he'eku timi pe 'oku malava ke tala pe 'oku folau 'a e kau faka'aonga'i 'o mama'o mei ha tab pau 'i he UI. Na’a ku fakahaa’i atu ‘a e me’a na’e hoko kimu’a pea toki tukuange ‘a e JavaScript. Ka ko kinautolu kuo nau tackled 'eni kimu'a 'oku nau 'ilo'i 'oku malava 'eni koe'uhi he kuo nau taa'i 'aki 'a e ngaahi fakatokanga fekau'aki mo e fakamatala 'oku te'eki ke fakahaofi 'i he ngaahi saiti kehe, 'a ia ko e beforeunload ko ha keisi faka'aonga'i angamaheni. Na'a ku fakahaa'i foki 'a e pageHide mo e visibilityChange ngaahi me'a na'e hoko ki hoku kaunga ngaue ki he me'afua lelei. Naʻá ku ʻilo fēfē ki he meʻa ko iá? Koe'uhi na'e ha'u ia 'i ha poloseki 'e taha, 'ikai koe'uhi na'a ku ako hake ki ai 'i he taimi na'e 'uluaki ako ai 'a e JavaScript. Ko e mo'oni ko e ngaahi frameworks fakaonopooni 'o e front-end 'oku nau tu'u 'i he uma 'o e kau tangata lalahi 'o e tekinolosia na'a nau mu'omu'a 'iate kinautolu. 'Oku nau abstract 'a e ngaahi founga fakalakalaka, 'oku fa'a hoko ki ha a'usia lelei ange 'a e developer 'oku ne fakasi'isi'i, pe na'a mo e fakangata, 'a e fie ma'u ke 'ilo pe pa ki he me'a kuo tukufakaholo 'a e ngaahi fakakaukau mahu'inga 'o e mu'a-'osi 'oku mahalo 'oku totonu ke 'ilo 'e he tokotaha kotoa pe. Fakakaukau ki he Sipinga ʻo e Meʻa CSS (CSSOM). Mahalo te ke ‘amanaki ko ha taha ‘oku ngaue ‘i he CSS mo e JavaScript ‘oku ‘i ai ‘ene fu’u nima-‘i he CSSOM a’usia, ka ‘oku ‘ikai ke hoko ma’u pe ia. Na'e 'i ai ha poloseki React ki ha saiti e-commerce na'a ku ngaue ki ai 'a ia na'a mau fie ma'u ke uta ha stylesheet ki he kautaha totongi 'oku lolotonga fili. Ko e palopalema ko e stylesheet na'e uta 'i he peesi kotoa pe ka na'e fie ma'u mo'oni pe ia 'i ha peesi pau. Ko e developer na’e fakafatongia’aki ke ne ‘ai ke hoko ‘eni na’e te’eki ke ne uta ha stylesheet dynamically. Toe, 'Oku mahino kakato 'eni 'i he taimi 'oku abstracts 'e he React 'a e founga tukufakaholo mahalo na'a ke a'u ki ai. Ko e CSSOM 'oku ngalingali 'oku 'ikai ko ha me'a ia 'oku ke fiema'u 'i ho'o ngaue faka'aho. Ka ‘oku ngalingali te ke fiema‘u ke fetu‘utaki mo ia ‘i ha taimi, na‘a mo ha tu‘unga tu‘o taha pē. Naʻe ueʻi au ʻe he ngaahi meʻa ko ʻeni ne hokó ke u tohi ʻa e fakamatala ko ʻení. 'Oku lahi 'a e ngaahi me'a 'oku 'i ai 'i he uepi mo e ngaahi tekinolosia 'i he vao 'a ia mahalo 'e 'ikai te ke teitei ala fakahangatonu ki ai 'i ho'o ngaue faka'aho. Mahalo ‘oku ke fairly fo’ou ki he fakalakalaka ‘o e uepi pea ‘oku ‘ikai ke ke ‘ilo’i kinautolu koe’uhi ‘oku ke steeped ‘i he abstraction ‘o ha fa’unga pau ‘oku ‘ikai fie ma’u ke ke ‘ilo loloto ia, pe na’a mo e ‘ikai. ‘Oku ou lea fakatefito ‘i he XML, ‘a ia ‘oku ‘ilo ‘e he tokolahi ‘o kitautolu ko ha lea motu’a ‘oku ‘ikai ke fu’u kehekehe ‘aupito mei he HTML. ‘Oku ou ‘omi ‘eni koe’uhi ko e ngaahi alea kimuí ni mai ‘a e WHATWG ‘oku fokotu’u mai ai ‘oku totonu ke to’o ha konga mahu’inga ‘o e XML stack ‘oku ‘iloa ko e polokalama XSLT mei he ngaahi browsers. Ko e fa’ahinga tonu ‘eni ‘o e tekinolosia motu’a ange, ‘oku ‘i ai ‘a ia kuo tau ma’u ‘i he ngaahi ta’u ‘e lava ke faka’aonga’i ki ha me’a ‘oku ‘aonga ‘o hange ko e tu’unga CSSOM na’e ‘i ai ‘eku timi. Kuo ke ngaue mo e XSLT kimu'a? Tau vakai pe ‘oku tau falala lahi ki he tekinolosia motu’a ko ‘eni pea leverage hono ngaahi fotunga ‘i tu’a ‘i he tu’unga ‘o e XML ke tau’i ‘a e ngaahi palopalema ‘o e mamani mo’oni ‘o e ‘aho ni. XPath: Ko e API Lotolotó Ko e tekinolosia XML mahu'inga taha 'oku mahalo ko e 'aonga taha ia 'i tu'a 'i ha fakakaukau XML hangatonu ko e XPath, ko ha lea fehu'i 'oku ne faka'ata koe ke ke kumi ha node pe 'ulungaanga 'i ha 'akau markup mo e 'elemeniti 'o e aka 'e taha. 'Oku ou ma'u ha 'ofa fakafo'ituitui ki he XSLT, ka 'oku fakafalala foki ia ki he XPath, pea kuo pau ke tuku 'a e 'ofa fakafo'ituitui ki he tafa'aki 'i he mahu'inga 'o e fakahokohoko. Ko e fakakikihi ki hono to'o 'o e XSLT 'oku 'ikai ke ne fai ha lave ki he XPath, ko ia 'oku ou mahalo 'oku kei fakangofua pe. ‘Oku lelei ia koe’uhi ko e XPath ‘a e API tefito mo mahu’inga taha ‘i he suite ko ‘eni ‘o e ngaahi tekinolosia, tautautefito ki he taimi ‘oku feinga ai ke kumi ha me’a ke faka’aonga’i ‘i tu’a ‘i hono faka’aonga’i angamaheni ‘o e XML. 'Oku mahu'inga koe'uhi, lolotonga 'e lava ke faka'aonga'i 'a e CSS selectors ke kumi 'a e lahi taha 'o e ngaahi 'elemeniti 'i ho'o peesi, 'Oku 'ikai lava ke nau kumi kotoa kinautolu. 'Ikai ngata ai, 'Oku 'ikai lava ke faka'aonga'i 'a e CSS selectors ke kumi ha 'elemeniti 'o makatu'unga 'i hono tu'unga lolotonga 'i he DOM. XPath lava. Ko 'eni, mahalo 'oku 'ilo 'e he ni'ihi 'o kimoutolu 'oku mou lau 'eni 'a e XPath, pea mahalo 'oku 'ikai ke 'ilo 'e he ni'ihi. XPath ko ha ‘elia ‘oku fu’u lahi ‘aupito ‘o e tekinolosia, pea ‘oku ‘ikai te u lava ‘o ako’i mo’oni ‘a e ngaahi tefito’i me’a kotoa pe pea fakahaa’i atu foki ‘a e ngaahi me’a malie ke fai ‘aki ia ‘i ha fakamatala ‘e taha hange ko ‘eni. Na’a ku feinga mo’oni ke tohi ‘a e fakamatala ko ia, ka ko e ‘avalisi ‘o e pulusinga ‘o e Smashing Magazine ‘oku ‘ikai ke laka hake ia ‘i he fo’i lea ‘e 5,000. Naʻá ku ʻosi ʻi he laka hake ʻi he 10.00.2,000 lea lolotonga ia 'oku kei vaeua pe 'a e ngaahi tefito'i me'a. Ko ia, ‘Oku ou ‘alu ke kamata ke fai ha ngaahi me’a malie mo e XPath pea ‘oatu ha ngaahi fehokotaki’anga ‘e lava ke ke faka’aonga’i ki he ngaahi tefito’i me’a kapau te ke ‘ilo ‘a e me’a ko ‘eni ‘oku malie. Fakataha'i 'o e XPath & CSS ‘E lava ke fai ‘e he XPath ‘a e ngaahi me’a lahi ‘oku ‘ikai lava ‘e he kau fili CSS ‘i he taimi ‘oku nau fehu’ia ai ‘a e ngaahi ‘elemeniti. Ka ‘e lava foki ke fai ‘e he kau fili CSS ha ngaahi me’a si’isi’i ‘oku ‘ikai lava ‘e he XPath, ‘a ia, fehu’i ‘a e ngaahi ‘elemeniti ‘aki ‘a e hingoa ‘o e kalasi.
CSS XHala .ko hoku Kalasi /*['oku 'i ai(@kalasi, "'ekuKalasi")]
'I he sipinga ko 'eni, 'Oku fehu'i 'e he CSS 'a e ngaahi 'elemeniti 'oku 'i ai ha hingoa kalasi .myClass. Lolotonga iá, 'oku fehu'ia 'e he sipinga 'o e XPath 'a e ngaahi 'elemeniti 'oku 'i ai ha kalasi 'o e 'ulungaanga mo e aho “myClass”. 'I hono fakalea 'e taha, 'Oku ne fili 'a e ngaahi 'elemeniti 'oku 'i ai 'a e myClass 'i ha fa'ahinga 'ulungaanga, kau ai 'a e ngaahi 'elemeniti 'oku 'i ai 'a e hingoa 'o e kalasi .myClass — pea pehe ki he ngaahi 'elemeniti 'oku 'i ai 'a e “myClass” 'i he aho, hange ko e .myClass2. 'Oku lahi ange 'a e XPath 'i he 'uhinga ko ia. Ko ia, ʻikai. ‘Oku ‘ikai te u fokotu’u atu ‘oku totonu ke tau toss out ‘a e CSS pea kamata ke fili ‘a e ngaahi ‘elemeniti kotoa pe ‘o fakafou ‘i he XPath. ‘Oku ‘ikai ko e poini ia. Ko e poini ko e XPath 'e lava ke ne fai 'a e ngaahi me'a 'oku 'ikai lava 'e he CSS pea 'e lava ke kei 'aonga 'aupito, neongo ko ha tekinolosia motu'a ange ia 'i he browser stack pea mahalo 'e 'ikai ngali mahino 'i he 'uluaki vakai. Tau faka’aonga’i fakataha ‘a e ongo tekinolosia ‘o ‘ikai ngata pe ‘i he’etau lava, ka koe’uhi te tau ako ha me’a fekau’aki mo e XPath ‘i he founga, ‘o ‘ai ia ko ha me’angaue ‘e taha ‘i ho’o stack — ko e taha mahalo na’e ‘ikai te ke ‘ilo’i kuo ‘i ai ‘i he taimi kotoa pe! Ko e palopalema ko e founga ‘o e document.evaluate ‘a e JavaScript mo e ngaahi founga kehekehe ‘o e fili fehu’i ‘oku tau faka’aonga’i mo e CSS APIs ki he JavaScript ‘oku ‘ikai ke nau fe’unga. Kuo u fai ha API fehu’i fe’unga ke tau kamata, neongo ‘oku fakamo’oni’i, ‘Oku ‘ikai ke u ‘ai ha fakakaukau lahi ki ai talu mei he’ene mavahe mei he me’a ‘oku tau fai heni. Ko e sipinga ngaue faingofua ‘eni ‘o ha constructor fehu’i ‘oku lava ke toe faka’aonga’i: Vakai ki he fehuʻi ʻa e PeniXPath [fakaʻauha] ʻe Palaieni Lasimuseni. Kuo u tanaki atu ha ongo founga ‘i he me’a ‘o e tohi: fehu’iCSSSelectors (‘a ia ko e me’a mahu’inga fehu’iSelectorAll) mo e fehu’iXPaths. 'Oku fakatou fakafoki mai 'e he ongo me'a ni ha me'a queryResults:
{ fehu'iFa'ahinga: ngaahi nodes | aho | fika | Puleani, ngaahi ola: ha [] // ngaahi 'elemeniti html, ngaahi 'elemeniti xml, ngaahi aho, ngaahi fika, booleans, . fehu'iCSSSelectors: (fehu'i: aho, fakatonutonu: boolean) => fehu'iOla, fehu'iXpaths: (fehu'i: aho, fakatonutonu: boolean) => fehu'iOla }
'Oku lele 'a e ngaahi ngaue 'a e queryCSSSelectors mo e queryXpaths 'a e fehu'i 'oku ke 'oange kiate kinautolu 'i he ngaahi 'elemeniti 'i he ngaahi ola 'o e fakahokohoko, 'o kapau 'oku 'o e ngaahi ola 'o e fakahokohoko 'o e nodes 'o e fa'ahinga, 'o e mo'oni. Ka 'ikai, te ne fakafoki mai ha queryResult mo ha array 'ata'ataa mo ha fa'ahinga 'o e nodes. Kapau 'oku seti 'a e koloa fakatonutonu ki he mo'oni, 'e liliu 'e he ngaahi ngaue 'enau queryResults. ‘Oku ‘ikai totonu ke ngāue‘aki eni ‘i ha tu‘unga ‘i ha ‘ātakai ngaohi‘anga koloa. 'Oku ou fai ia 'i he founga ko 'eni ma'a ke fakahaa'i 'a e ngaahi ola kehekehe 'o hono faka'aonga'i 'o e ongo APIs fehu'i fakataha. Ngaahi Fehu'i Fakatata 'Oku ou fie fakahaa'i ha ngaahi fakatata si'isi'i 'o e ngaahi fehu'i kehekehe 'o e XPath 'oku ne fakahaa'i 'a e ni'ihi 'o e ngaahi me'a malohi 'e lava ke nau fai mo e founga 'e lava ke nau faka'aonga'i ai 'i he feitu'u 'o e ngaahi founga kehe. Ko e 'uluaki fakatata ko e //li/tohi (). 'Oku fehu'ia 'e he me'a ni 'a e ngaahi 'elemeniti li kotoa pe pea fakafoki mai 'enau ngaahi nodes tohi. Ko ia, kapau na'a tau fehu'i 'a e HTML ko 'eni:
- taha
- ua
- tolu
...ko e me'a 'eni 'oku fakafoki mai:
{"Fa'ahinga fehu'i":"xpathEvaluate","ngaahi ola":["taha","ua","tolu"],"fa'ahinga ola":"aho"}
'I hono fakalea 'e taha, 'oku tau ma'u 'a e array ko 'eni: ["taha","ua","tolu"]. Ko e angamahení, te ke fehuʻi ki he ngaahi ʻelemēniti li ke maʻu ʻa e meʻa ko iá, liliu ʻa e ola ʻo e fehuʻi ko iá ki ha fakahokohoko, mapeʻi ʻa e fakahokohoko, pea fakafoki ʻa e note tohi ʻo e ʻelemēniti takitaha. Ka 'e lava ke tau fai ia 'o fakanounou ange 'aki 'a e XPath: tohi.fehu'iXHala("//li/tohi()").ngaahi ola.
Fakatokanga'i ange ko e founga ke ma'u ai ha note tohi ko hono faka'aonga'i 'o e tohi(), 'a ia 'oku hange ha fakamo'oni hingoa 'o e ngaue — pea 'oku. 'Oku ne fakafoki mai 'a e note tohi 'o ha 'elemeniti. 'I he'etau fakatata, 'Oku 'i ai ha ngaahi 'elemeniti li 'e tolu 'i he faka'ilonga, 'oku takitaha 'i ai 'a e tohi ("taha", "ua", mo e "tolu"). Tau vakai ki ha toe fakatātā ‘e taha ‘o ha fehu’i text(). Fakakaukau ko 'etau faka'ilonga 'eni: Fakamoʻoni ki loto
Tau tohi ha fehu’i ‘oku ne fakafoki mai ‘a e mahu’inga ‘o e ‘ulungaanga href: tohi.fehu'iXPaths ("//a [tohi () = 'Fakamo'oni'] / @ href ").ngaahi ola.
Ko ha fehu'i XPath 'eni 'i he tohi lolotonga, hange pe ko e sipinga fakamuimuitaha, ka ko e taimi ko 'eni 'oku tau fakafoki 'a e href attribute 'o ha fehokotaki'anga (ko ha 'elemeniti) 'oku 'i ai 'a e tohi “Sign In”. Ko e fakafoki mo'oni .ko e ola ko e ["/ hū.html"]. Fakakaukau fakalukufua ki he ngaahi ngaue 'a e XPath ‘Oku ‘i ai ha ngaahi ngaue ‘a e XPath, pea mahalo ‘oku ‘ikai te ke maheni mo kinautolu. ʻOku ʻi ai ha niʻihi, ʻoku ou pehē, ʻoku taau ke ʻilo ki ai, kau ai ʻa e ngaahi meʻa ko ʻení:
kamata-moKapau 'oku kamata ha tohi 'aki ha sipinga tohi kehe pau, kamata-mo(@href, 'http:') 'oku fakafoki mai 'a e mo'oni kapau 'oku kamata ha 'ulungaanga href 'aki 'a e http:. containsIf 'oku 'i ai ha tohi 'oku 'i ai ha sipinga tohi kehe pau, 'oku 'i ai(tohi(), "Makasini Smashing") 'oku ne fakafoki mai 'a e mo'oni kapau 'oku 'i ai ha note tohi 'a e ngaahi lea “Makasini Smashing” 'i ai 'i ha feitu'u pe. countReturns ha lau 'o e lahi 'o e ngaahi fe'unga 'oku 'i ai ki ha fehu'i. Hange ko 'eni, lau(//*[kamata-mo(@href, 'http:']) 'oku ne fakafoki mai ha lau 'o e lahi 'o e ngaahi fehokotaki'anga 'i he note 'o e tu'unga 'oku 'i ai ha ngaahi 'elemeniti 'oku 'i ai ha 'ulungaanga href 'oku 'i ai 'a e tohi 'oku kamata 'aki 'a e http:. substringNgaue hange ko e JavaScript 'a e 'uhila si'isi'i, tukukehe kapau 'oku ke paasi 'a e aho ko ha fakakikihi. Hange ko 'eni, 'oku fakafoki mai 'e he substring ("'eku tohi", 2, 4) "y t". substring-beforeFakafoki mai 'a e konga 'o ha aho kimu'a 'i ha aho kehe. Hange ko 'eni, substing-kimu'a("'eku tohi", " ") 'oku ne fakafoki mai 'a e "'eku". 'I he founga tatau, substring-kimu'a("hi","mavae") 'oku ne fakafoki mai ha aho 'ata'ataa. substring-afterFakafoki 'a e konga 'o ha aho hili ha aho 'e taha. Hange ko 'eni, substing-hili("'eku tohi", " ") 'oku ne fakafoki mai 'a e "tohi". 'I he founga tatau, substring-hili ("hi","mavae") 'oku ne fakafoki mai ha aho 'ata'ataa. normalize-spaceReturns 'a e aho 'o e fakakikihi mo e whitespace normalized 'aki hono to'o 'o e taki mo e muimui 'o e whitespace pea fetongi 'a e ngaahi hokohoko 'o e ngaahi mata'itohi 'o e whitespace 'aki ha feitu'u 'e taha. notReturns ha boolean mo'oni kapau 'oku loi 'a e fakakikihi, ka 'ikai 'oku loi. mo'oni 'Oku ne fakafoki mai 'a e boolean mo'oni. loiFakafoki mai 'a e boolean loi. concatKo e me'a tatau pe mo e JavaScript concat, tukukehe kapau 'oku 'ikai ke ke fakalele ia ko ha founga 'i ha aho. Ka, 'oku ke 'ai 'a e ngaahi afo kotoa pe 'oku ke fie concatenate. string-length'Oku 'ikai tatau 'eni mo e JavaScript 'a e aho-loloa, ka 'oku ne fakafoki mai 'a e loloa 'o e aho 'oku 'oatu ia ko ha fakakikihi. translate'Oku to'o 'e he me'a ni ha aho pea liliu 'a e fakakikihi hono ua ki he fakakikihi hono tolu. Hange ko 'eni, liliu ("abcdef", "abc", "XYZ") 'oku ne 'omai 'a e XYZdef.
Makehe mei he ngaahi ngaue pau ko 'eni 'o e XPath, 'Oku 'i ai ha ngaahi ngaue kehe 'oku nau ngaue tatau pe mo honau ngaahi hoa ngaue JavaScript — pe ngaahi hoa ngaue 'i he tefito'i lea fakapolokalama — 'a ia mahalo te ke toe ma'u 'aonga, hange ko e faliki, silingí, takai, fakataha'i, mo e me'a pehē. ʻOku fakatātaaʻi ʻe he fakaʻaliʻali ko ʻení ʻa e ngaahi ngāue takitaha ko ʻení: Vakai ki he Peni XPath Ngaahi ngaue fakafika [fakafoki] 'e Bryan Rasmussen. Fakatokanga'i ange, hange ko e lahi taha 'o e ngaahi ngaue 'o e manipulation 'o e aho, 'oku to'o 'e he tokolahi 'o e ngaahi fika ha input 'e taha. Ko e me'a 'eni, 'o e mo'oni, koe'uhi 'oku totonu ke nau faka'aonga'i ki he fehu'i, hange ko ia 'i he sipinga fakamuimuitaha 'o e XPath: // li [folau (tohi ()) > 250] / @ val
Kapau te ke faka'aonga'i kinautolu, hange ko e lahi taha 'o e ngaahi fakatata, te ke iku 'o lele ia 'i he 'uluaki note 'oku fe'unga mo e hala. 'Oku 'i ai foki ha ngaahi ngaue 'o e liliu 'o e fa'ahinga 'oku totonu ke ke faka'ehi'ehi mei ai mahalo koe'uhi 'oku 'osi 'i ai 'a e JavaScript 'a 'ene ngaahi palopalema 'o e liliu 'o e fa'ahinga. Ka ʻe lava ke ʻi ai ha ngaahi taimi ʻokú ke fie liliu ai ha aho ki ha fika koeʻuhí ke ke vakaiʻi ia ʻi ha fika kehe. Ko e ngaahi ngaue 'oku nau seti 'a e fa'ahinga 'o ha me'a ko e boolean, fika, aho, mo e node. Ko e ngaahi datatypes mahu'inga 'eni 'o e XPath. Pea hange ko ia 'oku ke fakakaukau ki ai, 'e lava ke faka'aonga'i 'a e lahi taha 'o e ngaahi ngaue ko 'eni 'i he datatypes 'oku 'ikai ko e ngaahi nodes DOM. Hange ko ‘eni, substring-hili ‘oku ne to’o ha aho hange ko ia kuo tau ‘osi ‘ufi’ufi, ka ‘e lava ke hoko ia ko e aho mei ha ‘ulungaanga href. ʻE lava foki ke hoko pē ia ko ha aho:
const siviSubstringHili = tohi.fehu'iXPaths ("fehu'i-hili ('hello mamani',' ')");
'Oku mahino, 'e 'omi 'e he sipinga ko 'eni 'a e ngaahi ola 'o e array ko e ["mamani"]. Ke fakahaa'i 'eni 'i he ngaue, Kuo u ngaohi ha peesi faka'ali'ali 'o faka'aonga'i 'a e ngaahi ngaue ki he ngaahi me'a 'oku 'ikai ko e ngaahi nodes DOM: Vakai ki he fehuʻi ʻa e PeniXPath [fakaʻauha] ʻe Palaieni Lasimuseni. 'Oku totonu ke ke fakatokanga'i 'a e tafa'aki faka'ohovale 'o e ngaue 'o e liliu, 'a ia kapau 'oku 'i ai ha'o 'ulungaanga 'i he fakakikihi hono ua (i.e., 'a e lisi 'o e ngaahi 'ulungaanga 'oku ke fie liliu) pea 'ikai ha 'ulungaanga 'oku fe'unga ke liliu ki ai, 'Oku ma'u 'e he 'ulungaanga ko ia 'a e to'o mei he output. Ko ia, ko e me‘á ni:
translate('Mālō, Ko hoku hingoá ko ʻIniko Monitoia, naʻá ke tāmateʻi ʻeku tamaí, teuteu ke mate',',','*')
...ngaahi ola 'i he aho, kau ai 'a e ngaahi 'ata: [" * * ** "]
Ko hono 'uhinga 'oku liliu 'a e mata'itohi “a” ki ha faka'ilonga fetu'u (*), ka ko e mata'itohi kehe kotoa pe 'oku 'ikai ha liliu 'oku 'oange 'a e aho taumu'a 'oku to'o faka'aufuli. Ko e whitespace ko e me'a pe ia kuo tau toe .‘i he vaha‘a ‘o e ngaahi mata‘itohi “a” kuo liliú. Pea toe, ko e fehu'i ko 'eni:
translate('Mālō, Ko Hoku Hingoa ko ʻIniko Monitoia, naʻá ke tāmateʻi ʻeku tamaí, teuteu ke mate','
...'oku 'ikai ke ne ma'u 'a e palopalema pea outputs ha ola 'oku hange ko 'eni:
" ***** ** **** ** ***** ******* *** ***** ***** ***** ** ***"
Mahalo 'e taa'i koe 'oku 'ikai ha founga faingofua 'i he JavaScript ke fai tonu 'a e me'a 'oku fai 'e he ngaue liliu XPath, neongo ki he ngaahi keisi faka'aonga'i lahi, replaceAll mo e ngaahi fakalea angamaheni 'e lava ke ne tokanga'i ia. Te ke lava ʻo fakaʻaongaʻi ʻa e founga tatau kuó u fakahaaʻí, ka ʻoku suboptimal ia kapau ko e meʻa pē ʻokú ke fie maʻú ke liliu ʻa e ngaahi afo. Ko e faka’ali’ali ko ‘eni ‘oku ne takai’i ‘a e ngaue liliu ‘a e XPath ke ‘omai ha founga JavaScript: Vakai ki he ngāue liliu ʻo e Pení [fakaʻilongaʻi] ʻe Bryan Rasmussen. Ko fē nai te ke ngāueʻaki nai ai ha meʻa pehē? Fakakaukau ki he fakapulipuli 'o e Caesar Cipher mo ha offset 'o e feitu'u 'e tolu (e.g., fakapulipuli 'o e tumutumu-'o e-laine mei he 48 B.C.):
liliu("'Oku palani 'a Sisa ke kolosi 'i he Lupikoni!", "ABCDEFGHIJKLMNOPQRSTUVWXYZABČTEFHIKLMNOPOQRSTUVXYZ", "XYZABCDEFGHIJKLMNOPQRSTUVWxyzabcdefhijklmnopqrstuvw")
Ko e tohi fakahū “ʻOku palani ʻa Sisa ke kolosi ʻi he Lupikoni!” ‘oku iku ia ki he “Zxbpxo fp mixkkfkd ql zolpp qeb Oryfzlk!” Ke 'oatu ha toe sipinga vave 'o e ngaahi me'a kehekehe 'e lava ke hoko, Na'a ku ngaohi ha ngaue ukamea 'oku ne to'o ha input 'o e aho pea 'oku ne faka'aonga'i ha ngaue liliu ke fakafoki 'a e tohi, kau ai 'a e ngaahi mata'itohi kotoa pe 'oku nau to'o 'a e umlauts. Vakai ki he ngāue ukamea ʻo e Pení [fakaʻilongaʻi] ʻe Palaieni Lasimuseni.
const ukamea = (str) => { fakafoki liliu(str, "AOUaou","ÄÖÜäöü"); }
Pea, kapau ʻe ʻoange ʻa e konga tohi “ʻOku pule ʻa e Motley Crue, maka ʻi he kau tangata!”, ʻoku fakafoki mai ʻa e “ʻOku pule ʻa e Motley Crue, maka ʻi he düdes!” 'Oku mahino, 'e lava ke ma'u 'e ha taha 'a e ngaahi fa'ahinga kotoa pe 'o e ngaahi faka'aonga'i parody 'o e ngaue ko 'eni. Kapau ko koe ia, pea ‘oku totonu ke ‘oatu ‘e he fakamatala ko ‘eni ‘a e TVTropes ha ngaahi ue’i lahi. Faka'aonga'i 'o e CSS mo e XPath . Manatu'i 'etau 'uhinga tefito ki hono faka'aonga'i 'o e CSS selectors fakataha mo e XPath: CSS 'oku mahino 'aupito 'a e me'a 'oku 'i ai ha kalasi, ka ko e lelei taha te ke lava 'o fai 'aki 'a e XPath ko e ngaahi fakafehoanaki 'o e aho 'o e 'ulungaanga 'o e kalasi. ‘E ola lelei ia ‘i he ngaahi tu‘unga lahi tahá. Ka 'o kapau na'a ke lele ki ha tu'unga 'a ia, talamai, na'e fa'u 'e ha taha 'a e ngaahi kalasi 'oku ui ko e .primaryLinks mo e .primaryLinks2 pea na'a ke faka'aonga'i 'a e XPath ke ma'u 'a e kalasi .primaryLinks, pea 'e ngalingali te ke lele ki he ngaahi palopalema. Ko e taimi pe ‘oku ‘ikai ha me’a vale pehe, mahalo te ke ngaue’aki ‘a e XPath. Ka ʻoku ou loto mamahi ke lipooti kuó u ngāue ʻi ha ngaahi feituʻu ʻoku fai ai ʻe he kakaí ʻa e faʻahinga meʻa fakavalevale ko iá. Ko e toe demo ‘eni ‘o faka’aonga’i fakataha ‘a e CSS mo e XPath. ‘Oku ne fakahaa’i ‘a e me’a ‘oku hoko ‘i he taimi ‘oku tau ngaue’aki ai ‘a e code ke fakalele ha XPath ‘i ha note ‘o e context ‘oku ‘ikai ko e node ‘o e tohi. Vakai ki he Pen css mo e xpath fakataha [fakafetongi] ʻe Palaieni Lasimuseni. Ko e fehu'i CSS ko e .relatedarticles a, 'a ia 'oku ne 'omi 'a e ongo 'elemeniti 'i ha div 'oku vahe'i ha kalasi .relatedarticles. Hili ia ko e ngaahi fehu'i “kovi” 'e tolu, 'a ia ko e ngaahi fehu'i 'oku 'ikai ke nau fai 'a e me'a 'oku tau fie ma'u ke nau fai 'i he taimi 'oku lele ai mo e ngaahi 'elemeniti ko 'eni ko e note 'o e context. Te u lava ʻo fakamatalaʻi atu ʻa e ʻuhinga ʻoku nau tōʻonga kehe ai mei he meʻa ʻokú ke ʻamanaki ki aí. Ko e ngaahi fehu'i kovi 'e tolu 'oku fai ki ai 'a e fehu'i ko e:
//text(): Fakafoki mai 'a e ngaahi tohi kotoa pe 'i he tohi. //a/text(): Fakafoki mai 'a e ngaahi tohi kotoa pe 'i loto 'i he ngaahi fehokotaki'anga 'i he tohi. ./a/text(): 'Oku 'ikai ke fakafoki mai ha ola.
Ko e 'uhinga 'o e ngaahi ola ko 'eni ko e lolotonga ko ho'o context ko ha ngaahi 'elemeniti 'oku fakafoki mai mei he fehu'i CSS, // 'oku 'alu 'o fakafepaki'i 'a e tohi kotoa. Ko e malohi 'eni 'o e XPath; He'ikai lava 'e he CSS 'o 'alu mei ha note 'o a'u ki ha kui pea toki 'alu ki ha tokoua 'o e kui ko ia, pea lue hifo ki ha hako 'o e tokoua ko ia. Ka 'e lava 'e he XPath. Lolotonga iá, ./ fehu'i 'a e fānau 'o e node lolotonga, 'a ia 'oku fakafofonga'i ai 'e he toti (.) 'a e node lolotonga, pea 'oku fakafofonga'i 'e he slash ki mu'a (/) 'a e 'alu ki ha ngaahi node 'o e tamasi'i — pe ko ha 'ulungaanga, 'elemeniti, pe tohi 'oku fakapapau'i 'e he konga hoko 'o e hala. Ka 'oku 'ikai ha tamasi'i ha 'elemeniti 'oku fili 'e he fehu'i CSS, ko ia 'oku 'ikai foki ke fakafoki mai 'e he fehu'i ko ia ha me'a. 'Oku 'i ai ha ngaahi fehu'i lelei 'e tolu 'i he faka'ali'ali fakamuimuitaha ko ia:
.//tohi (), ./tohi(), angamaheni-vahe(./tohi()).
'Oku fakahaa'i 'e he fehu'i normalize-space 'a hono faka'aonga'i 'o e ngaue XPath, ka 'oku ne toe fakalelei'i foki ha palopalema 'oku kau 'i he ngaahi fehu'i kehe. 'Oku fokotu'utu'u 'a e HTML 'o hange ko 'eni:
2018/04/sivi-ngaahi-seleniume-uepi-faka'uli/"> Faka'otometiki ho'o sivi 'o e ngaahi me'a 'i he Seleniume WebDriver .
'Oku fakafoki mai 'e he fehu'i ha fafanga laine 'i he kamata'anga mo e ngata'anga 'o e note tohi, .pea normalize-vahe 'oku ne to'o 'eni. Faka'aonga'i ha fa'ahinga ngaue XPath 'oku ne fakafoki mai ha me'a kehe mei ha boolean mo ha input XPath 'oku faka'aonga'i ki he ngaahi ngaue kehe. ʻOku fakahaaʻi ʻe he fakaʻaliʻali ko ʻení ha ngaahi sīpinga lahi: Vakai ki he ngaahi fakatātā ʻo e ngaahi ngāue ʻo e Pen xpath [fakaʻauha] ʻe Bryan Rasmussen. ʻOku fakahaaʻi ʻe he ʻuluaki sīpingá ha palopalema ʻoku totonu ke ke tokanga ki ai. Fakataumu'a, 'a e code ko 'eni:
tohi.fehu'iXPaths ("faka'ilonga-hili (//a/@href,'https://')");
...fakafoki mai ha aho 'e taha:
"www.makasini faka'auha.com/2018/04/'ulungaanga-sivi-seleniume-uepi-faka'uli/"
‘Oku ‘uhinga lelei ia, ‘ikai ko ia? 'Oku 'ikai ke fakafoki mai 'e he ngaahi ngaue ko 'eni 'a e ngaahi arrays ka ko e ngaahi aho 'e taha pe ngaahi fika 'e taha. Ko hono fakalele 'o e ngaue 'i ha feitu'u pe mo e ngaahi ola lahi 'oku ne fakafoki mai pe 'a e 'uluaki ola. ʻOku fakahaaʻi ʻe he ola hono uá ʻa e meʻa ʻoku tau fie maʻu moʻoní:
tohi.fehu'iCSSSelectors ("a").fehu'iXPaths ("faka'ilonga-hili (./@href,'https://')");
'A ia 'oku ne fakafoki mai ha array 'o e ongo aho:
["www.
'E lava ke nested 'a e ngaahi ngaue 'o e XPath 'o hange pe ko e ngaahi ngaue 'i he JavaScript. Ko ia, kapau 'oku tau 'ilo'i 'a e fokotu'utu'u 'o e URL 'o e Makasini Smashing, te tau lava 'o fai 'a e ngaahi me'a ko 'eni ('oku fokotu'u atu hono faka'aonga'i 'o e ngaahi literals 'o e sipinga): `liliu( aho si'isi'i( 'o e 'uhinga-hili (./@href, 'www.makasini faka'auha.com/') ,9), '/','')`
'Oku ma'u 'eni ha ki'i fu'u faingata'a ki he tu'unga 'oku ne fie ma'u 'a e ngaahi fakamatala 'oku fakamatala'i 'a e me'a 'oku ne fai: to'o kotoa 'a e URL mei he href 'ulungaanga hili 'a e www.smashingmagazine.com/, to'o 'a e 'uluaki mata'itohi 'e hiva, pea liliu 'a e slash ki mu'a (/) mata'itohi ki he 'ikai ha me'a koe'uhi ke mavahe mei he faka'osinga 'o e slash ki he. Ko e array 'oku ma'u mei ai:
["fotunga-sivi-seleniume-webdriver","'otometiki-sivi-ngaahi ola-fakalelei'i-'a e lava ke ma'u"]
Ngaahi Keisi Faka'aonga'i 'o e XPath lahi ange
'E lava ke ulo mo'oni 'a e XPath 'i he sivi. 'Oku 'ikai faingata'a ke sio ki he 'uhinga, 'o hange ko e XPath 'e lava ke faka'aonga'i ke ma'u 'a e 'elemeniti kotoa pe 'i he DOM, mei ha fa'ahinga tu'unga 'i he DOM, ka 'oku 'ikai lava 'e he CSS.
'Oku 'ikai lava ke ke falala ki he ngaahi kalasi CSS 'oku kei tu'uma'u 'i he ngaahi sisitemi langa fakaonopooni lahi, ka 'i he XPath, 'Oku tau lava 'o fai ha ngaahi fe'auhi fefeka ange 'o hange ko e me'a 'oku 'i he kakano 'o e tohi 'o ha 'elemeniti, tatau ai pe pe ko ha liliu 'a e fokotu'utu'u DOM.
Kuo 'i ai ha ngaahi fakatotolo ki he ngaahi founga 'oku ne faka'ata koe ke ke fai ha ngaahi sivi XPath 'oku fefeka. 'Oku 'ikai ha me'a 'e kovi ange 'i he 'i ai ha ngaahi sivi flake 'o 'ikai lava koe'uhi pe ko e 'ikai ke toe ngaue 'a e CSS selector koe'uhi ko ha me'a kuo toe fakahingoa pe to'o.
'Oku toe lahi mo'oni 'a e XPath 'i he to'o hingoa 'o e locator lahi. 'Oku lahi ange 'i he founga 'e taha ke faka'aonga'i 'a e ngaahi fehu'i XPath ke fakafehoanaki ha 'elemeniti. 'Oku pehe pe mo e CSS. Ka 'e lava ke drill 'a e ngaahi fehu'i XPath ki he ngaahi me'a 'i ha founga 'oku fakataumu'a lahi ange 'oku ne fakangatangata 'a e me'a 'oku ma'u 'o fakafoki mai, 'o faka'ata koe ke ke kumi ha fe'auhi pau 'a ia 'e lava ke 'i ai ha ngaahi fe'auhi 'e lava ke hoko.
Hange ko 'eni, 'e lava ke tau faka'aonga'i 'a e XPath ke fakafoki mai ha 'elemeniti h2 pau 'oku 'i loto 'i ha div 'oku muimui vave ki ha div tokoua 'a ia, 'i he tafa'aki 'e taha, 'oku 'i ai ha 'elemeniti 'o e 'imisi 'o e tamasi'i mo ha data-testID = "taki" 'ulungaanga 'i ai:
'oua 'e ma'u 'a e 'ulu'i ongoongo ko 'eni