Kuv tau nyob rau hauv pem hauv ntej-kawg txoj kev loj hlob ntev txaus kom pom ib tug qauv nyob rau hauv lub xyoo: cov hluas developers ua hauj lwm nrog ib tug tshiab paradigm ntawm programming tsis nkag siab txog keeb kwm ntsiab lus ntawm nws. Nws yog, ntawm chav kawm, zoo kawg nkaus to taub tsis paub ib yam dab tsi. Lub vev xaib yog qhov chaw loj heev nrog ntau hom kev txawj ntse thiab kev tshwj xeeb, thiab peb tsis tas yuav paub dab tsi peb tsis paub. Kev kawm hauv daim teb no yog kev taug kev mus tas li es tsis yog ib yam uas tshwm sim ib zaug thiab xaus. Piv txwv li: Ib tug neeg ntawm kuv pab neeg tau nug seb nws puas tuaj yeem qhia tau yog tias cov neeg siv taug kev deb ntawm ib qho tab hauv UI. Kuv taw qhia JavaScript qhov ua ntej unload. Tab sis cov neeg uas tau daws qhov no ua ntej paub qhov no yog qhov ua tau vim tias lawv tau raug ceeb toom txog cov ntaub ntawv tsis tau txais kev cawmdim ntawm lwm qhov chaw, uas ua ntej unload yog qhov kev siv raug. Kuv kuj tau taw qhia rau nplooj ntawvHide thiab pom kev Hloov cov xwm txheej rau kuv cov npoj yaig kom ntsuas qhov zoo. Kuv paub li cas txog qhov ntawd? Vim tias nws tuaj rau hauv lwm qhov project, tsis yog vim kuv tau kawm txog nws thaum pib kawm JavaScript. Qhov tseeb yog tias niaj hnub pem hauv ntej-kawg lub moj khaum yog sawv ntawm lub xub pwg nyom ntawm cov thev naus laus zis loj uas ua ntej lawv. Lawv paub daws teeb meem kev txhim kho, feem ntau rau kev tsim kho kom zoo dua qub uas txo qis, lossis txawm tias tshem tawm, qhov xav tau kom paub lossis kov yam uas ib txwm ua yog cov ntsiab lus tseem ceeb hauv ntej-kawg txhua tus yuav tsum paub. Xav txog CSS Object Model (CSSOM). Tej zaum koj yuav cia siab tias ib tus neeg ua haujlwm hauv CSS thiab JavaScript muaj ib pab pawg ntawm kev ua haujlwm ntawm CSSOM, tab sis qhov ntawd tsis yog ib txwm yuav muaj. Muaj ib txoj haujlwm React rau qhov chaw lag luam e-lag luam uas kuv tau ua haujlwm ntawm qhov chaw uas peb xav tau los thauj cov ntawv teev npe rau cov chaw muab kev them nyiaj tam sim no. Qhov teeb meem yog qhov stylesheet tau thauj khoom ntawm txhua nplooj ntawv thaum nws tsuas yog xav tau tiag tiag ntawm nplooj ntawv tshwj xeeb. Tus tsim tawm ua haujlwm ua qhov no tshwm sim tsis tau muaj ib daim ntawv teev cov style dynamically. Ntxiv dua thiab, qhov no yog qhov nkag siab tag nrho thaum React abstracts deb ntawm txoj hauv kev uas koj yuav tau mus txog. CSSOM yuav tsis yog ib yam uas koj xav tau hauv koj txoj haujlwm txhua hnub. Tab sis nws zoo li koj yuav xav tau kev cuam tshuam nrog nws ntawm qee lub sijhawm, txawm tias nyob hauv ib qho piv txwv. Cov kev paub no tau tshoov kuv lub siab los sau tsab xov xwm no. Muaj ntau lub vev xaib uas twb muaj lawm thiab thev naus laus zis hauv cov tsiaj qus uas koj yuav tsis kov ncaj qha hauv koj txoj haujlwm niaj hnub. Tej zaum koj yog tus tshiab rau kev txhim kho lub vev xaib thiab tsuas yog tsis paub txog lawv vim tias koj tau nkag mus rau hauv qhov kev xav ntawm lub ntsiab lus tshwj xeeb uas tsis xav kom koj paub nws tob, lossis txawm tag nrho. Kuv tab tom hais tshwj xeeb txog XML, uas peb coob leej paub yog hom lus qub uas tsis sib txawv ntawm HTML. Kuv tab tom nqa qhov no vim tsis ntev los no WHATWG kev sib tham qhia tias ib qho tseem ceeb ntawm XML pawg hu ua XSLT programming yuav tsum raug tshem tawm ntawm browsers. Qhov no yog qhov qub, uas twb muaj lawm thev naus laus zis peb tau muaj rau xyoo uas tuaj yeem siv rau qee yam ua tau zoo raws li CSSOM qhov xwm txheej kuv pab neeg tau nyob. Koj puas tau ua haujlwm nrog XSLT ua ntej? Cia peb pom yog tias peb lean hnyav rau hauv cov thev naus laus zis qub no thiab siv nws cov yam ntxwv sab nraud ntawm XML los daws cov teeb meem tiag tiag niaj hnub no. XPath: The Central API Qhov tseem ceeb tshaj plaws XML thev naus laus zis uas yog tej zaum qhov tseem ceeb tshaj plaws sab nraud ntawm XML txoj kev ncaj ncees yog XPath, cov lus nug uas tso cai rau koj mus nrhiav cov node lossis tus cwj pwm hauv ib tsob ntoo markup nrog ib lub hauv paus ntsiab lus. Kuv muaj kev hlub tus kheej rau XSLT, tab sis qhov ntawd kuj tso siab rau XPath, thiab kev hlub ntawm tus kheej yuav tsum tau muab tso rau hauv qhov tseem ceeb. Qhov kev sib cav rau kev tshem XSLT tsis tau hais txog XPath, yog li kuv xav tias nws tseem tso cai. Qhov ntawd yog qhov zoo vim tias XPath yog qhov tseem ceeb thiab tseem ceeb tshaj API nyob rau hauv cov khoom siv thev naus laus zis no, tshwj xeeb tshaj yog thaum sim nrhiav qee yam los siv sab nraud XML kev siv. Nws yog ib qho tseem ceeb vim hais tias, thaum CSS selectors siv tau los nrhiav feem ntau ntawm cov ntsiab lus hauv koj nplooj ntawv, lawv nrhiav tsis tau tag nrho. Tsis tas li ntawd, CSS selectors tsis tuaj yeem siv los nrhiav cov khoom raws li nws txoj haujlwm tam sim no hauv DOM. XPath can. Tam sim no, ib txhia ntawm koj nyeem qhov no tej zaum yuav paub XPath, thiab ib txhia yuav tsis. XPath yog thaj chaw loj zoo nkauj ntawm thev naus laus zis, thiab kuv tsis tuaj yeem qhia tag nrho cov hauv paus ntsiab lus thiab tseem qhia koj yam txias ua nrog nws hauv ib tsab xov xwm zoo li no. Kuv yeej sim sau cov ntawv ntawd, tab sis qhov nruab nrab Smashing Magazine tshaj tawm tsis dhau 5,000 lo lus. Kuv twb nyob ntau tshaj2,000 lo lus thaum tsuas yog ib nrab ntawm cov hauv paus. Yog li, kuv yuav pib ua cov khoom txias nrog XPath thiab muab qee qhov txuas uas koj tuaj yeem siv rau qhov pib yog tias koj pom cov khoom no nthuav. Combining XPath & CSS XPath tuaj yeem ua ntau yam uas CSS xaiv tsis tuaj yeem thaum nug cov ntsiab lus. Tab sis CSS selectors tseem tuaj yeem ua ob peb yam uas XPath tsis tuaj yeem, piv txwv li, nug cov ntsiab lus los ntawm lub npe chav kawm.
CSS XPath .myClass /*[contains(@class, "myClass")]
Hauv qhov piv txwv no, CSS cov lus nug cov ntsiab lus uas muaj lub npe .myClass. Lub caij no, XPath piv txwv queries cov ntsiab lus uas muaj cov chav kawm attribute nrog cov hlua "myClass". Hauv lwm lo lus, nws xaiv cov ntsiab lus nrog myClass hauv txhua tus cwj pwm, suav nrog cov ntsiab lus nrog .myClass classname - nrog rau cov ntsiab lus nrog "myClass" hauv txoj hlua, xws li .myClass2. XPath yog dav dav hauv qhov kev nkag siab ntawd. Yog li, tsis muaj. Kuv tsis tau hais tias peb yuav tsum pov tawm CSS thiab pib xaiv txhua yam ntawm XPath. Qhov ntawd tsis yog lub ntsiab lus. Lub ntsiab lus yog tias XPath tuaj yeem ua tej yam uas CSS tsis tuaj yeem ua tau thiab tseem tuaj yeem muaj txiaj ntsig zoo, txawm tias nws yog cov cuab yeej qub hauv pawg browser thiab tej zaum yuav tsis pom tseeb thaum xub thawj siab ib muag. Cia peb siv ob lub thev naus laus zis ua ke tsis yog vim peb tuaj yeem ua tau, tab sis vim tias peb yuav kawm qee yam ntawm XPath hauv cov txheej txheem, ua rau nws ua lwm yam cuab yeej hauv koj pawg - ib qho koj yuav tsis tau paub tau nyob ntawd txhua lub sijhawm! Qhov teeb meem yog tias JavaScript's document. soj ntsuam txoj hauv kev thiab ntau yam lus nug xaiv txoj kev peb siv nrog CSS APIs rau JavaScript tsis sib xws. Kuv tau ua qhov sib txuas lus nug API kom tau txais peb pib, txawm hais tias lees paub, kuv tsis tau muab ntau qhov kev xav rau hauv nws txij li nws tau ncaim ntawm qhov peb tab tom ua ntawm no. Nov yog ib qho piv txwv ua haujlwm yooj yim ntawm cov lus nug uas siv tau rov qab siv tau: Saib Pen queryXPath [forked] los ntawm Bryan Rasmussen. Kuv tau ntxiv ob txoj hauv kev ntawm cov khoom siv: queryCSSSelectors (uas yog qhov tseem ceeb querySelectorAll) thiab queryXPaths. Ob leeg ntawm no rov qab ib qho queryResults object:
{ queryType: nodes | hlua | tus lej | boolean, cov txiaj ntsig: ib qho[] // html cov ntsiab lus, xml cov ntsiab lus, cov hlua, cov lej, booleans, queryCSSSelectors: (query: hlua, kho: boolean) => queryResults, queryXpaths: (lus nug: hlua, kho: boolean) => queryResults }
Cov queryCSSSelectors thiab queryXpaths ua haujlwm khiav cov lus nug uas koj muab rau lawv hla cov ntsiab lus hauv cov txiaj ntsig array, tsuav yog cov txiaj ntsig array yog hom nodes, tau kawg. Txwv tsis pub, nws yuav xa rov qab cov lus nugResult nrog ib qho array khoob thiab ib hom ntawm nodes. Yog tias cov cuab yeej hloov kho tau teeb tsa rau qhov tseeb, cov haujlwm yuav hloov lawv tus kheej queryResults. Tsis muaj qhov xwm txheej no yuav tsum tau siv nyob rau hauv ib puag ncig tsim khoom. Kuv tab tom ua nws li no nkaus xwb los qhia txog ntau yam teebmeem ntawm kev siv ob qhov lus nug APIs ua ke. Piv txwv Cov Lus Nug Kuv xav qhia ob peb yam piv txwv ntawm cov lus nug XPath sib txawv uas qhia txog qee yam uas lawv muaj peev xwm ua tau thiab lawv yuav siv tau li cas los ntawm lwm txoj hauv kev. Thawj qhov piv txwv yog //li/text(). Qhov no nug tag nrho cov ntsiab lus li thiab xa rov qab lawv cov ntawv sau. Yog li, yog tias peb xav nug cov HTML hauv qab no:
- ib
- ob
- peb
… Nov yog qhov rov qab los:
{"queryType":"xpathEvaluate","results":["ib","ob","three"],"resultType":"string"}
Hauv lwm lo lus, peb tau txais cov lus hauv qab no: ["ib", "ob", "peb"]. Nquag, koj yuav nug txog li cov ntsiab lus kom tau txais qhov ntawd, tig qhov tshwm sim ntawm cov lus nug ntawd rau hauv ib qho array, daim ntawv qhia cov array, thiab xa cov ntawv ntawm txhua lub ntsiab lus. Tab sis peb tuaj yeem ua qhov ntawd ntau dua nrog XPath: document.queryXPaths("//li/text()").results.
Daim ntawv ceeb toom tias txoj hauv kev kom tau txais cov ntawv sau yog siv cov ntawv nyeem (), uas zoo li lub luag haujlwm kos npe - thiab nws yog. Nws rov qab cov ntawv node ntawm ib lub caij. Hauv peb qhov piv txwv, muaj peb lub ntsiab lus hauv lub cim, txhua qhov muaj cov ntawv nyeem ("ib", "ob", thiab "peb").
Cia peb saib ib qho piv txwv ntxiv ntawm cov lus nug () lus nug. Nco ntsoov tias qhov no yog peb lub cim:
Cia peb sau cov lus nug uas rov qab tus nqi href: document.queryXPaths("//a[text() = 'Sign In']/@href").results.
Qhov no yog ib qho lus nug XPath ntawm cov ntaub ntawv tam sim no, ib yam li qhov piv txwv kawg, tab sis lub sijhawm no peb rov qab qhov href attribute ntawm qhov txuas (ib lub ntsiab lus) uas muaj cov ntawv "Sau npe". Qhov tseeb rov qab losqhov tshwm sim yog ["/login.html"]. XPath Functions Overview Muaj ntau lub luag haujlwm XPath, thiab tej zaum koj yuav tsis paub nrog lawv. Muaj ntau ntau, kuv xav tias, uas tsim nyog paub txog, suav nrog cov hauv qab no:
starts-withIf ib cov ntawv pib nrog ib qho piv txwv ntawm lwm cov ntawv nyeem, starts-with(@href, 'http:') rov qab muaj tseeb yog tias tus cwj pwm href pib nrog http:. muaj Yog tias cov ntawv muaj ib qho piv txwv ntawm lwm cov ntawv nyeem, muaj (cov ntawv nyeem (), "Smashing Magazine") rov qab muaj tseeb yog tias cov ntawv sau muaj cov lus "Smashing Magazine" nyob rau txhua qhov chaw. countReturns ib tug suav ntawm pes tsawg qhov sib tw muaj rau cov lus nug. Piv txwv li, suav (//*[starts-with(@href, 'http:']) rov qab suav txog pes tsawg qhov txuas hauv cov ntsiab lus ntawm lub ntsiab lus muaj cov ntsiab lus nrog href attribute uas muaj cov ntawv pib nrog http: . substringWorks zoo li JavaScript substring, tshwj tsis yog koj hla txoj hlua raws li kev sib cav. Piv txwv li, substring("my text", 2, 4) rov "y t". substring-beforeReturns ib feem ntawm ib txoj hlua ua ntej lwm txoj hlua. Piv txwv li, substing-before("my text", "") rov "kuv". Ib yam li ntawd, substring-ua ntej ("hi", "bye") rov qab ib txoj hlua khoob. substring-afterReturns ib feem ntawm ib txoj hlua tom qab lwm txoj hlua. Piv txwv li, substing-after("kuv ntawv", "") rov qab "ntawv". Ib yam li ntawd, substring-after("hi", "bye") rov qab ib txoj hlua khoob. normalize-spaceReturns cov lus sib cav nrog whitespace normalized los ntawm stripping coj thiab trailing whitespace thiab hloov sequences ntawm whitespace cim los ntawm ib qhov chaw. notReturns ib boolean tseeb yog hais tias qhov kev sib cav yog cuav, txwv tsis pub dag. trueReturns boolean tseeb. falseReturns boolean cuav. concat tib yam li JavaScript concat, tshwj tsis yog koj tsis khiav nws raws li txoj hauv kev ntawm txoj hlua. Xwb, koj muab tso rau hauv tag nrho cov hlua koj xav kom concatenate. string-lengthThis tsis yog tib yam li JavaScript hlua-ntev, tab sis rov qab qhov ntev ntawm txoj hlua nws tau muab los ua kev sib cav. txhais qhov no siv ib txoj hlua thiab hloov qhov kev sib cav thib ob rau qhov kev sib cav thib peb. Piv txwv li, txhais ("abcdef", "abc", "XYZ") outputs XYZdef.
Ib cag ntawm cov haujlwm XPath tshwj xeeb no, muaj ntau lwm cov haujlwm uas ua haujlwm zoo ib yam li lawv cov JavaScript counterparts - lossis cov sib koom ua ke hauv ib qho lus programming - uas koj kuj yuav pom muaj txiaj ntsig, xws li pem teb, qab nthab, puag ncig, suav, thiab lwm yam. Cov nram qab no demo qhia txog txhua yam ntawm cov haujlwm no: Saib Pen XPath Numerical functions [forked] los ntawm Bryan Rasmussen. Nco ntsoov tias, zoo li feem ntau ntawm txoj hlua kev ua haujlwm, ntau tus lej siv ib qho kev tawm tswv yim. Qhov no yog, ntawm chav kawm, vim hais tias lawv yuav tsum tau siv rau querying, raws li nyob rau hauv lub xeem XPath piv txwv: //li[floor(text())> 250]/@val
Yog tias koj siv lawv, raws li feem ntau ntawm cov piv txwv ua, koj yuav xaus rau kev khiav nws ntawm thawj qhov uas phim txoj hauv kev. Kuj tseem muaj qee hom kev hloov dua siab tshiab uas koj yuav tsum tau zam vim tias JavaScript twb muaj nws tus kheej cov teeb meem hloov dua siab tshiab. Tab sis muaj peev xwm muaj sij hawm thaum koj xav hloov txoj hlua rau ib tus lej txhawm rau txheeb xyuas nws tawm tsam lwm tus lej. Cov haujlwm uas teeb tsa hom ib yam dab tsi yog boolean, tus lej, txoj hlua, thiab node. Cov no yog cov ntaub ntawv tseem ceeb XPath. Thiab raws li koj xav txog, feem ntau ntawm cov haujlwm no tuaj yeem siv rau ntawm cov ntaub ntawv uas tsis yog DOM nodes. Piv txwv li, substring-tom qab siv txoj hlua raws li peb twb tau npog, tab sis nws tuaj yeem yog txoj hlua los ntawm tus yam ntxwv href. Nws tseem tuaj yeem yog ib txoj hlua:
const testSubstringAfter = document.queryXPaths("substring-after('nyob zoo',' ')");
Obviously, qhov piv txwv no yuav muab peb rov qab cov txiaj ntsig array li ["world"]. Txhawm rau qhia qhov no hauv kev nqis tes ua, kuv tau tsim nplooj ntawv demo siv cov haujlwm tawm tsam yam tsis yog DOM nodes: Saib Pen queryXPath [forked] los ntawm Bryan Rasmussen. Koj yuav tsum nco ntsoov qhov xav tsis thoob ntawm txoj haujlwm txhais lus, uas yog tias koj muaj tus cwj pwm hauv qhov kev sib cav thib ob (piv txwv li, cov npe ntawm cov cim koj xav tau txhais) thiab tsis muaj tus cwj pwm zoo los txhais rau, tus cwj pwm ntawd raug tshem tawm ntawm qhov tso zis. Yog li, qhov no:
txhais('Nyob zoo, Kuv lub npe yog Inigo Montoya, koj tua kuv txiv, npaj tuag','abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,','*')
… ua rau txoj hlua, nrog rau qhov chaw: ["* ** "]
Qhov no txhais tau hais tias tsab ntawv "a" raug muab txhais ua lub hnub qub (*), tab sis txhua lwm tus cim uas tsis muaj kev txhais lus muab lub hom phiaj txoj hlua raug tshem tawm tag nrho. Qhov chaw dawb yog txhua yam peb tau tso tsegnruab nrab ntawm cov txhais "a" cim. Tom qab ntawd dua, lo lus nug no:
txhais('Nyob zoo, Kuv lub npe yog Inigo Montoya, koj tua kuv txiv, npaj tuag','abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,'*******************************************************')")
... tsis muaj teeb meem thiab tso tawm cov txiaj ntsig zoo li no:
"********************************************************************************
Nws tuaj yeem cuam tshuam koj tias tsis muaj txoj hauv kev yooj yim hauv JavaScript ua raws nraim li XPath txhais ua haujlwm ua, txawm hais tias rau ntau qhov kev siv, hloov tag nrho nrog cov lus hais tsis tu ncua tuaj yeem daws nws. Koj tuaj yeem siv tib txoj hauv kev uas kuv tau qhia, tab sis qhov ntawd yog qhov zoo tshaj yog tias txhua yam koj xav tau yog txhais cov hlua. Cov nram qab no demo qhwv XPath txoj haujlwm txhais lus los muab JavaScript version: Saib tus cwj mem txhais ua haujlwm [forked] los ntawm Bryan Rasmussen. Koj yuav siv tej yam zoo li no nyob qhov twg? Xav txog Caesar Cipher encryption nrog peb qhov chaw offset (piv txwv li, top-of-the-line encryption los ntawm 48 BC):
txhais ("Caesar tab tom npaj hla Rubicon!", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", "XYZABCDEFGHIJKLMNOPQRSTUVWxyzabcdefghijklmnopqrstuvw")
Cov ntawv sau "Caesar tab tom npaj hla Rubicon!" results in “Zxbpxo fp mixkkfkd ql zolpp qeb Oryfzlk!” Txhawm rau muab lwm qhov piv txwv nrawm ntawm qhov muaj peev xwm sib txawv, kuv tau ua cov haujlwm hlau uas siv cov hlua nkag thiab siv cov lus txhais kom rov qab cov ntawv nyeem, suav nrog txhua tus cim uas siv umlauts. Saib Pen metal function [forked] los ntawm Bryan Rasmussen.
const hlau = (str) => { return translation(str, "AOUaou","ÄÖÜäöü"); }
Thiab, yog tias muab cov ntawv nyeem "Motley Crue cov cai, pob zeb ntawm dudes!", rov qab "Mötley Crüe rüles, röck ön düdes!" Obviously, ib tug yuav muaj txhua hom kev siv parody ntawm qhov haujlwm no. Yog tias yog koj, tsab xov xwm TVTropes yuav tsum muab kev tshoov siab rau koj. Siv CSS Nrog XPath Nco ntsoov peb lub laj thawj tseem ceeb ntawm kev siv CSS selectors ua ke nrog XPath: CSS zoo nkauj nkag siab tias chav kawm yog dab tsi, qhov zoo tshaj plaws uas koj tuaj yeem ua nrog XPath yog txoj hlua sib piv ntawm chav kawm. Qhov ntawd yuav ua haujlwm hauv feem ntau. Tab sis yog tias koj puas tau khiav mus rau qhov xwm txheej uas, hais tias, ib tus neeg tsim cov chav kawm npe hu ua .primaryLinks thiab .primaryLinks2 thiab koj tau siv XPath kom tau txais cov chav kawm .primaryLinks, ces koj yuav muaj teeb meem. Tsuav tsis muaj dab tsi ua dag li ntawd, tej zaum koj yuav siv XPath. Tab sis kuv tu siab tshaj tawm tias kuv tau ua haujlwm ntawm qhov chaw uas tib neeg ua tej yam uas dag. Nov yog lwm qhov demo siv CSS thiab XPath ua ke. Nws qhia tau tias muaj dab tsi tshwm sim thaum peb siv cov cai los khiav XPath ntawm cov ntsiab lus ntawm cov ntsiab lus uas tsis yog daim ntawv node. Saib Pen css thiab xpath ua ke [forked] los ntawm Bryan Rasmussen. Cov lus nug CSS yog .relatedarticles a, uas nqa ob lub ntsiab lus hauv div tau muab rau chav kawm .relatedarticles. Tom qab ntawd yog peb qhov "phem" queries, uas yog hais tias, cov lus nug uas tsis ua qhov peb xav kom lawv ua thaum khiav nrog cov ntsiab lus raws li cov ntsiab lus ntawm node. Kuv tuaj yeem piav qhia vim li cas lawv coj txawv dua li qhov koj xav tau. Peb cov lus nug tsis zoo hauv nqe lus nug yog:
//text(): Rov qab tag nrho cov ntawv hauv daim ntawv. //a/text(): Rov qab tag nrho cov ntawv hauv cov ntawv txuas hauv daim ntawv. ./a/text(): Rov qab tsis tau.
Yog vim li cas rau cov txiaj ntsig no yog tias thaum koj cov ntsiab lus yog cov ntsiab lus rov qab los ntawm CSS cov lus nug, // tawm tsam tag nrho cov ntaub ntawv. Qhov no yog lub zog ntawm XPath; CSS tsis tuaj yeem mus ntawm ib lub pob mus rau ib tug poj koob yawm txwv thiab tom qab ntawd mus rau ib tug kwv tij ntawm tus yawg koob ntawd, thiab taug kev mus rau ib tug xeeb ntxwv ntawm cov nus muag. Tab sis XPath tuaj yeem ua tau. Lub caij no, ./ queries cov me nyuam ntawm lub tam sim no node, qhov twg lub dot (.) sawv cev rau lub tam sim no node, thiab rau pem hauv ntej slash (/) sawv cev rau mus rau ib co me nyuam node - seb nws yog ib tug cwj pwm, lub ntsiab lus, los yog cov ntawv yog txiav txim los ntawm lub tom ntej no txoj kev. Tab sis tsis muaj ib tug me nyuam ib lub caij xaiv los ntawm CSS cov lus nug, yog li cov lus nug ntawd kuj rov qab tsis muaj dab tsi. Muaj peb cov lus nug zoo nyob rau hauv qhov kawg demo:
.//text(), ./text(), normalize-space./text()).
Cov lus nug normalize-chaw qhia txog kev siv XPath, tab sis kuj kho qhov teeb meem nrog rau lwm cov lus nug. HTML yog tsim raws li nram no:
Automating Koj Cov Kev Ntsuas Zoo Nrog Selenium WebDriver
Cov lus nug rov qab ib kab noj ntawm qhov pib thiab qhov kawg ntawm cov ntawv nyeem,thiab normalize-space tshem tawm qhov no. Siv ib qho kev ua haujlwm XPath uas xa rov qab ib yam dab tsi uas tsis yog lub boolean nrog cov tswv yim XPath siv rau lwm cov haujlwm. Cov nram qab no demo qhia ntau yam piv txwv: Saib Pen xpath functions piv txwv [forked] los ntawm Bryan Rasmussen. Thawj qhov piv txwv qhia txog qhov teeb meem koj yuav tsum tau saib xyuas. Tshwj xeeb, cov cai hauv qab no:
document.queryXPaths("substring-after(//a/@href,'https://')");
… rov qab ib txoj hlua:
"www.smashingmagazine.com/2018/04/feature-testing-selenium-webdriver/"
Nws ua rau kev nkag siab, txoj cai? Cov haujlwm no tsis rov qab arrays tab sis theej ib txoj hlua lossis ib tus lej. Kev khiav haujlwm nyob qhov twg nrog ntau qhov txiaj ntsig tsuas yog rov qab thawj qhov tshwm sim. Qhov thib ob tshwm sim qhia tias peb xav tau dab tsi:
document.queryCSSSelectors("a").queryXPaths("substring-after./@href,'https://')");
Uas rov qab ib array ntawm ob txoj hlua:
["www.smashingmagazine.com/2018/04/feature-testing-selenium-webdriver/","www.smashingmagazine.com/2022/11/automated-test-results-improve-accessibility/"]
XPath ua haujlwm tuaj yeem ua zes ib yam li cov haujlwm hauv JavaScript. Yog li, yog tias peb paub Smashing Magazine URL qauv, peb tuaj yeem ua cov hauv qab no (siv cov ntawv sau tau pom zoo): ` txhais( substring( substring-after./@href, 'www.smashingmagazine.com/') , 9), '/',')'
Qhov no tau txais me ntsis nyuaj rau qhov uas nws xav tau cov lus piav qhia nws ua dab tsi: nqa tag nrho cov URL los ntawm href attribute tom qab www.smashingmagazine.com/, tshem tawm thawj cuaj lub cim, tom qab ntawd txhais lub cim rau pem hauv ntej (/) tsis muaj dab tsi thiaj li tshem tau qhov xaus rau pem hauv ntej slash. Lub resulting array:
["feature-testing-selenium-webdriver","automated-test-results-improve-accessibility"]
Ntau qhov kev siv XPath XPath tuaj yeem ci ntsa iab hauv kev sim. Yog vim li cas tsis yooj yim pom, vim XPath tuaj yeem siv tau kom tau txais txhua yam hauv DOM, los ntawm txhua txoj haujlwm hauv DOM, qhov CSS tsis tuaj yeem. Koj tsis tuaj yeem suav rau CSS cov chav kawm uas tseem tshuav nyob hauv ntau lub tsev tsim kho niaj hnub no, tab sis nrog XPath, peb tuaj yeem ua kom muaj kev sib tw ntau dua li cov ntsiab lus ntawm cov ntsiab lus yog dab tsi, tsis hais txog kev hloov DOM qauv. Muaj kev tshawb fawb txog cov txheej txheem uas tso cai rau koj los ua cov kev xeem XPath uas muaj zog. Tsis muaj ib yam dab tsi phem dua li qhov kev sim flake tawm thiab ua tsis tiav vim tias tus xaiv CSS tsis ua haujlwm lawm vim qee yam tau hloov npe lossis tshem tawm. XPath kuj tseem zoo heev ntawm ntau qhov chaw rho tawm. Muaj ntau tshaj li ib txoj hauv kev siv XPath cov lus nug kom phim cov khoom. Tib yam muaj tseeb nrog CSS. Tab sis cov lus nug XPath tuaj yeem tho rau hauv cov khoom hauv txoj hauv kev ntau lub hom phiaj uas txwv tsis pub xa rov qab, tso cai rau koj mus nrhiav qhov kev sib tw tshwj xeeb uas tej zaum yuav muaj ntau qhov sib tw. Piv txwv li, peb tuaj yeem siv XPath xa rov qab cov ntsiab lus tshwj xeeb h2 uas muaj nyob rau hauv div uas tam sim ntawd ua raws li cov nus muag div uas, dhau los, muaj cov duab me nyuam nrog cov ntaub ntawv-testID = "tus thawj coj" tus cwj pwm ntawm nws:
tsis tau txais cov xov xwm no
Tsis txhob txais cov xov xwm no ib yam
Lub header rau tus thawj coj duab
Nov yog cov lus nug: document.queryXPaths(` //div[ nram qab no-sibling::div[1] /img[@data-testID='cov'] ] /h2/ ntawv() `);
Cia peb poob rau hauv qhov demo kom pom tias txhua tus tuaj ua ke: Saib Pen Complex H2 Query [forked] los ntawm Bryan Rasmussen. Yog li, yog. Muaj ntau txoj hauv kev mus rau txhua lub hauv paus hauv kev sim siv XPath. XSLT 1.0 Kev tshem tawm Kuv tau hais thaum ntxov ntawm Chrome pab pawg npaj yuav tshem tawm XSLT 1.0 kev txhawb nqa los ntawm browser. Qhov ntawd yog qhov tseem ceeb vim tias XSLT 1.0 siv XML-tsim programming rau cov ntaub ntawv hloov pauv uas, dhau los, tso siab rau XPath 1.0, uas yog qhov muaj nyob hauv ntau qhov browsers. Thaum qhov ntawd tshwm sim, peb yuav poob ib feem tseem ceeb ntawm XPath. Tab sis muab qhov tseeb tias XPath yog qhov zoo heev rau kev sau ntawv, kuv pom tias nws tsis zoo li XPath tag nrho yuav ploj mus sai sai. Uas tau hais tias, Kuv tau pom tias tib neeg tau txaus siab rau qhov tshwj xeeb thaum nws raug tshem tawm. Thiab qhov ntawd yeej muaj tseeb nyob rau hauv rooj plaub ntawm XSLT 1.0 raug deprecated. Muaj ib qho kev sib tham tag nrho tshwm sim ntawm Hacker Xov Xwm uas muaj kev sib cav tawm tsam qhov kev txiav txim siab. Cov ncej nws tus kheej yog ib qho piv txwv zoo ntawm kev tsim lub hauv paus blogging nrog XSLT. Kojtuaj yeem nyeem qhov kev sib tham rau koj tus kheej, tab sis nws nkag mus rau hauv yuav ua li cas JavaScript yuav siv los ua tus shim rau XLST los daws cov teeb meem ntawd. Kuv kuj tau pom cov lus qhia tias browsers yuav tsum siv SaxonJS, uas yog qhov chaw nres nkoj rau JavaScript's Saxon XSLT, XQUERY, thiab XPath xyaw. Qhov ntawd yog lub tswv yim nthuav, tshwj xeeb tshaj yog raws li Saxon-JS siv cov qauv tam sim no ntawm cov kev qhia tshwj xeeb no, thaum tsis muaj qhov browser uas siv ib qho version ntawm XPath lossis XSLT dhau 1.0, thiab tsis muaj ib qho uas siv XQuery. Kuv mus txog rau Norm Tovey-Walsh ntawm Saxonica, lub tuam txhab tom qab SaxonJS thiab lwm yam versions ntawm Saxon engine. Nws hais tias: "Yog tias ib tus neeg muag khoom browser nyiam noj SaxonJS ua qhov pib rau kev sib koom ua ke niaj hnub XML thev naus laus zis rau hauv browser, peb yuav zoo siab los tham nrog lawv." - Norm Tovey-Walsh
Tab sis kuj ntxiv: "Kuv yuav xav tsis thoob yog tias leej twg xav tias noj SaxonJS hauv nws daim ntawv tam sim no thiab muab tso rau hauv qhov browser tsim tsis hloov pauv yuav yog txoj hauv kev zoo tshaj plaws. Tus neeg muag khoom browser, los ntawm qhov tseeb tias lawv tsim qhov browser, tuaj yeem ua rau kev sib koom ua ke ntawm qib tob dua li peb tuaj yeem 'los ntawm sab nraud'. " - Norm Tovey-Walsh
Nws yog tsim nyog sau cia tias Tovey-Walsh cov lus tuaj txog ib lub lim tiam ua ntej XSLT tshaj tawm kev txiav txim siab. Xaus Kuv tuaj yeem mus ntxiv. Tab sis kuv vam tias qhov no tau ua kom pom lub zog ntawm XPath thiab muab ntau yam piv txwv qhia tias yuav siv nws li cas kom ua tiav yam zoo. Nws yog ib qho piv txwv zoo tshaj plaws ntawm cov cuab yeej siv qub hauv qhov browser pawg uas tseem muaj ntau yam khoom siv niaj hnub no, txawm tias koj tsis tau paub tias nws muaj lossis tsis tau xav txog nws. Nyeem ntxiv
"Txhim kho qhov muaj peev xwm ntawm Kev Ntsuas Lub Vev Xaib nrog Cov Lus Nthuav" (ACM Digital Library) los ntawm Maroun Ayli, Youssef Bakouny, Nader Jalloul, thiab Rima KilanyCov kab lus no muab ntau qhov piv txwv XPath rau kev sau cov ntawv xeem. XPath (MDN) Qhov no yog qhov chaw zoo pib yog tias koj xav tau cov lus piav qhia txog kev ua haujlwm XPath li cas. XPath Tutorial (ZVON) Kuv tau pom qhov kev qhia no yog qhov pab tau tshaj plaws hauv kuv tus kheej txoj kev kawm, ua tsaug rau ntau yam piv txwv thiab cov lus piav qhia meej. XPatherThis sib tham sib lub cuab tam cia koj ua hauj lwm ncaj qha nrog cov cai.