Accessibility / URLs Links / List Links
The List Links bookmarklet generates a comprehensive report of all links (anchors and role="link" elements) in a new popup window. Extracts visible text content and accessible names (accounting for aria-label, aria-labelledby, image alt text), detects hidden links and reveals them temporarily, flags potential issues: empty links, missing href, aria-label/labelledby without visible text (WCAG 2.5.3 Label in Name), positive tabindex values, redundant role="link" on elements, and non-keyboard-focusable custom links. Includes "Show only links where there *may* be issues" filter, highlight buttons, and copyable URL inputs..
WCAG SC 2.4.4: Link PurposeWCAG SC 2.5.3: Label in NameWCAG SC 2.4.3: Focus Order
Run List Links
Test run or drag to
bookmarklets bar to install
javascript:%21function()%7B%22use%20strict%22%3B%21function()%7Bfunction%20e(e)%7Bconst%20t%3Dwindow.getComputedStyle(e)%3Breturn%22none%22%3D%3D%3Dt.display%7C%7C0%3D%3D%3Dt.opacity%7C%7C%22inset(100%25)%22%3D%3D%3Dt.clipPath%26%26%22rect(1px%2C%201px%2C%201px%2C%201px)%22%3D%3D%3Dt.clip%7C%7C%221px%22%3D%3D%3Dt.height%26%26%221px%22%3D%3D%3Dt.width%26%26%22hidden%22%3D%3D%3Dt.overflow%7Dlet%20t%3Bconsole.clear()%3Blet%20i%3D%22%22%2Co%3D%22%22%3Bconst%20n%3Ddocument.querySelectorAll(%22a%2C%5Brole%3Dlink%5D%22)%3Blet%20r%2Ca%3D1%2Cl%3D0%2Cs%3D%22%22%2Cd%3D%22%22%3BArray.from(n).forEach(function(i)%7Bconst%20n%3Ddocument.createElement(%22div%22)%3Bn.appendChild(i.cloneNode(%210))%2Cs%3Dn.innerHTML%3Blet%20c%3D%211%2Ch%3D%22%22%3Bconst%20u%3Di.querySelectorAll(%22img%22)%3Blet%20b%3D%211%2Cp%3D%211%3Bc%3Du.length%3E0%3Bconst%20g%3Di.querySelector(%22%5Baria-hidden%3Dtrue%5D%22)%3Bg%26%26g.classList.add(%22remove-from-accname%22)%2Cc%26%26Array.from(u).forEach(function(e)%7Bconst%20t%3Ddocument.createElement(%22SPAN%22)%3Bvar%20i%2Co%3Bt.setAttribute(%22class%22%2C%22visually-hidden%22)%2Ct.setAttribute(%22style%22%2C%22clip-path%3A%20inset(100%25)%3Bclip%3A%20rect(1px%2C%201px%2C%201px%2C%201px)%3Bheight%3A%201px%3Boverflow%3A%20hidden%3Bposition%3A%20absolute%3Bwhite-space%3A%20nowrap%3Bwidth%3A%201px%3B%22)%2Ct.setAttribute(%22aria-hidden%22%2C%22true%22)%2Ce.getAttribute(%22alt%22)%26%26(t.textContent%3D%22%20%22%2Be.getAttribute(%22alt%22)%2B%22%20%22)%2Ci%3Dt%2C(o%3De).parentNode.insertBefore(i%2Co.nextSibling)%7D)%2Ci.setAttribute(%22data-link-ref%22%2Ca)%3Blet%20f%3Di.textContent%3Bconst%20m%3Di.querySelector(%22.remove-from-accname%22)%3Bm%26%26m.remove()%3Blet%20k%3Di.textContent%3Bif(i.getAttribute(%22aria-label%22)%26%26(k%3Di.getAttribute(%22aria-label%22)%2Ch%2B%3D%22-%20Link%20gets%20accessible%20name%20from%20%3Ccode%3Earia-label%3C%2Fcode%3E%22%2C%22%22%21%3D%3Df.trim()%26%26(h%2B%3D%22%20Check%20that%20the%20accessible%20name%20does%20not%20contradict%20the%20text%20on%20screen%3Cbr%3E%22)%2Cb%3D%210%2C-1%3D%3D%3Dk.trim().toLowerCase().indexOf(f.trim().toLowerCase())%26%26(h%2B%3D%27-%20On-screen%20text%20does%20not%20appear%20in%20%3Ccode%3Earia-label%3C%2Fcode%3E.%20Looks%20like%20a%20%3Ca%20href%3D%22https%3A%2F%2Fwww.w3.org%2FWAI%2FWCAG21%2FUnderstanding%2Flabel-in-name.html%22%20target%3D%22_blank%22%3E2.5.3%20Label%20In%20Name%3C%2Fa%3E%20failure%3Cbr%3E%27))%2Ci.getAttribute(%22aria-labelledby%22))%7Bconst%20e%3Di.getAttribute(%22aria-labelledby%22).split(%22%20%22)%3Be.length%3E1%3F(k%3D%22%22%2CArray.from(e).forEach(function(e)%7Bk%2B%3Ddocument.querySelector(%22%23%22%2Be).textContent%2B%22%20%22%7D)%2Ck%3Dk.trim()%2Ch%2B%3D%22-%20Link%20gets%20accessible%20name%20from%20%3Ccode%3Earia-labelledby%3C%2Fcode%3E%20(multiple%20sources).%20Check%20that%20the%20accessible%20name%20does%20not%20contradict%20the%20text%20on%20screen%3Cbr%3E%22%2Cb%3D%210)%3A(k%3Ddocument.querySelector(%22%23%22%2Bi.getAttribute(%22aria-labelledby%22)).textContent%2Ch%2B%3D%22-%20Link%20gets%20accessible%20name%20from%20%3Ccode%3Earia-labelledby%3C%2Fcode%3E%20(single%20source).%20Check%20that%20the%20accessible%20name%20does%20not%20contradict%20the%20text%20on%20screen%3Cbr%3E%22%2Cb%3D%210)%2C-1%3D%3D%3Dk.trim().toLowerCase().indexOf(f.trim().toLowerCase())%26%26(h%2B%3D%27-%20On-screen%20text%20does%20not%20appear%20in%20%3Ccode%3Earia-labelledby%20sources%3C%2Fcode%3E.%20Looks%20like%20a%20%3Ca%20href%3D%22https%3A%2F%2Fwww.w3.org%2FWAI%2FWCAG21%2FUnderstanding%2Flabel-in-name.html%22%20target%3D%22_blank%22%3E2.5.3%20Label%20In%20Name%3C%2Fa%3E%20failure%3Cbr%3E%27)%7De(i)%26%26(%21function(e)%7Bconst%20t%3Dwindow.getComputedStyle(e)%3B%22absolute%22%3D%3D%3Dt.position%26%26%22hidden%22%3D%3D%3Dt.overflow%26%26(e.style.height%3D%22auto%22%2Ce.style.width%3D%22auto%22%2Ce.style.position%3D%22relative%22%2Ce.style.overflow%3D%22visible%22%2Ce.style.display%3D%22block%22%2Ce.style.opacity%3D1)%2C%22%22%21%3D%3De.getAttribute(%22hidden%22)%26%26%22hidden%22%21%3D%3De.getAttribute(%22hidden%22)%26%26%22true%22%21%3D%3De.getAttribute(%22hidden%22)%7C%7Ce.removeAttribute(%22hidden%22)%2C%22hidden%22%3D%3D%3Dt.visibility%26%26(e.style.visibility%3D%22visible%22)%2C%22none%22%3D%3D%3Dt.display%26%26(e.style.display%3D%22block%22)%2C0%3D%3D%3Dt.opacity%26%26(e.style.opacity%3D1)%7D(i)%2Ce(i)%3Fh%2B%3D%22Link%20is%20hidden%3Cbr%3E%22%3Ah%2B%3D%22Link%20*was*%20hidden%20but%20has%20been%20temporarily%20revealed%20on%20the%20page%3Cbr%3E%22)%2Cc%26%26(h%2B%3D%22%5Cud83c%5Cudf04%20Image%20link%3Cbr%3E%22)%2C%22button%22%3D%3D%3Di.getAttribute(%22role%22)%26%26(h%2B%3D%22-%20Link%20has%20a%20%3Ccode%3Erole%3C%2Fcode%3E%20of%20%3Ccode%3Ebutton%3C%2Fcode%3E.%20Check%20that%20it%20behaves%20like%20a%20%3Ccode%3Ebutton%3C%2Fcode%3E%20and%20is%20not%20used%20as%20navigation.%3Cbr%3E%22%2Cb%3D%210)%2Ci.getAttribute(%22title%22)%26%26i.getAttribute(%22title%22)%21%3D%3Df%26%26(h%2B%3D%27-%20Link%20has%20a%20%3Ccode%3Etitle%3C%2Fcode%3E%20which%20is%20different%20from%20text%20content.%20This%20%3Ccode%3Etitle%3C%2Fcode%3E%20content%20--%20%22%27%2Bi.getAttribute(%22title%22)%2B%27%22%20--%20will%20not%20be%20perceivable%20to%20assistive%20tech%2C%20keyboard%20and%20touch%20screen%20users%3Cbr%3E%27%2Cb%3D%210)%2Ci.getAttribute(%22title%22)%26%26i.getAttribute(%22title%22)%3D%3D%3Df%26%26(h%2B%3D%27Link%20has%20a%20%3Ccode%3Etitle%3C%2Fcode%3E%20which%20is%20the%20same%20as%20the%20text%20content%20and%20therefore%20adds%20no%20extra%20useful%20information%2Fcontext.%20This%20%3Ccode%3Etitle%3C%2Fcode%3E%20content%20--%20%22%27%2Bi.getAttribute(%22title%22)%2B%27%22%20--%20will%20not%20be%20perceivable%20to%20assistive%20tech%2C%20keyboard%20and%20touch%20screen%20users%3Cbr%3E%27)%2C%22A%22%3D%3D%3Di.tagName%26%26(null%21%3D%3Di.getAttribute(%22href%22)%7C%7Ci.getAttribute(%22tabindex%22)%7C%7C%22-1%22%3D%3D%3Di.getAttribute(%22tabindex%22)%7C%7C(h%2B%3D%22-%20Link%20does%20not%20have%20an%20%3Ccode%3Ehref%3C%2Fcode%3E%2C%20is%20not%20keyboard-focusable%3Cbr%3E%22%2Cb%3D%210)%2Cnull%3D%3D%3Di.getAttribute(%22href%22)%7C%7Ci.getAttribute(%22href%22)%7C%7Ci.getAttribute(%22tabindex%22)%7C%7C%22-1%22%3D%3D%3Di.getAttribute(%22tabindex%22)%7C%7C(h%2B%3D%22-%20Link%20does%20have%20an%20%3Ccode%3Ehref%3C%2Fcode%3E%20but%20it%20has%20no%20value%2C%20so%20it%20is%20keyboard-focusable%3Cbr%3E%22%2Cb%3D%210)%2C%21i.getAttribute(%22href%22)%26%26i.getAttribute(%22tabindex%22)%26%26%22-1%22%21%3D%3Di.getAttribute(%22tabindex%22)%26%26(h%2B%3D%22-%20Link%20does%20not%20have%20an%20%3Ccode%3Ehref%3C%2Fcode%3E%2C%20but%20is%20focusable%20because%20it%20has%20been%20provided%20with%20a%20positive%20%3Ccode%3Etabindex%3C%2Fcode%3E%3Cbr%3E%22%2Cb%3D%210)%2Ci.getAttribute(%22tabindex%22)%26%26%22-1%22%21%3D%3Di.getAttribute(%22tabindex%22)%26%26%220%22%21%3D%3Di.getAttribute(%22tabindex%22)%26%26(h%2B%3D%27-%20Link%20has%20a%20positive%20%3Ccode%3Etabindex%3C%2Fcode%3E%20(not%20-1%20or%200).%20Could%20cause%20a%20%3Ca%20href%3D%22https%3A%2F%2Fwww.w3.org%2FTR%2FWCAG21%2F%23focus-order%22%20target%3D%22_blank%22%3E2.4.3%20Focus%20order%3C%2Fa%3E%20failure.%3Cbr%3E%27%2Cb%3D%210)%2Ci.getAttribute(%22href%22)%26%26i.getAttribute(%22tabindex%22)%26%26%22-1%22%21%3D%3Di.getAttribute(%22tabindex%22)%26%26(h%2B%3D%22Link%20has%20a%20%3Ccode%3Etabindex%3C%2Fcode%3E%20but%20it%20is%20not%20needed%20because%20the%20%3Ccode%3Ehref%3C%2Fcode%3E%20makes%20it%20focusable%3Cbr%3E%22)%2C%22link%22%3D%3D%3Di.getAttribute(%22role%22)%26%26(h%2B%3D%22Link%20has%20a%20%3Ccode%3Erole%3C%2Fcode%3E%20of%20%3Ccode%3Elink%3C%2Fcode%3E.%20Not%20needed%20as%20it%20is%20an%20%3Ccode%3Ea%3C%2Fcode%3E%20element%20that%20is%20a%20link%20by%20default%3Cbr%3E%22))%2C%22A%22%21%3D%3Di.tagName%26%26%22link%22%3D%3D%3Di.getAttribute(%22role%22)%26%26(h%2B%3D%22-%20This%20has%20a%20%3Ccode%3Erole%3C%2Fcode%3E%20of%20%3Ccode%3Elink%3C%2Fcode%3E%20but%20is%20not%20an%20%3Ccode%3Ea%3C%2Fcode%3E%20element.%20Check%20that%20it%20is%20keyboard-operable%20(should%20activate%20with%20%3Ckbd%3EEnter%3C%2Fkbd%3E%20key)%3Cbr%3E%22%2Cb%3D%210)%2C%22%22%3D%3D%3Dk%26%26(k%3Di.getAttribute(%22title%22)%3Fi.getAttribute(%22title%22)%3A%22%5Cu203c%5Cufe0f%20Empty%20link%22%2Cf%3D%22%5Cu203c%5Cufe0f%20Empty%20link%22%2Ch%2B%3D%22%5Cu203c%5Cufe0f%20Empty%20link%3Cbr%3E%22%2Cp%3D%210)%2Cc%26%26%22%5Cu203c%5Cufe0f%20Empty%20link%22%3D%3D%3Dk%26%26(h%2B%3D%22%20-%20image%20is%20missing%20alternative%20text%20content%3Cbr%3E%22)%2Ci.href%26%26(t%3Di.href)%2Cp%26%26(b%3D%211)%2Co%2B%3D%22%3Ctr%22%2Co%2B%3D%27%20data-link-ref%3D%22%27%2Ba%2B%27%22%27%2Cb%26%26(o%2B%3D%27%20class%3D%22issue%20warn%22%27)%2Cp%26%26(o%2B%3D%27%20class%3D%22issue%20err%22%27)%2Co%2B%3D%22%3E%22%2Cr%3D%22A%22%3D%3D%3Di.tagName%3F%22%3Ccode%3E%26lt%3Ba%26gt%3B%3C%2Fcode%3E%22%3A%27%3Ccode%3Erole%3D%22link%22%3C%2Fcode%3E%27%2Co%2B%3D%22%3Ctd%3E%22%2Br%2B%22%3C%2Ftd%3E%22%2Co%2B%3D%22%3Ctd%3E%22%2Bf%2B%22%3C%2Ftd%3E%22%2Co%2B%3D%22%3Ctd%3E%22%2Bk%2Ck.trim()%21%3D%3Df.trim()%26%26%22%22%21%3D%3Df.trim()%26%26(o%2B%3D%27%3Cdiv%20class%3D%22anDiff%22%3EAccessible%20name%20differs%3C%2Fdiv%3E%27)%2Co%2B%3D%22%3C%2Ftd%3E%22%2Ck.trim()%21%3D%3Df.trim()%26%26k.trim().toLowerCase()%3D%3D%3Df.trim().toLowerCase()%26%26(h%2B%3D%22-%20Same%20text%20but%20case%20difference%20noted%20(likely%20not%20an%20issue)%22)%2Co%2B%3D%22%3Ctd%3E%22%2Cb%26%26(o%2B%3D%27%3Cdiv%20class%3D%22issues%22%3EPossible%20issue(s)%20found%20with%20this%20link%3C%2Fdiv%3E%27)%2Cp%26%26(o%2B%3D%27%3Cdiv%20class%3D%22issues%22%3EDefinite%20issue(s)%20found%20with%20this%20link%3C%2Fdiv%3E%27)%2Cd%3D%22Link%20%27%22%2Bf.trim()%2B%22%27%3A%5Cn%22%2Bh%2B%22Markup%20with%20issue%3A%5Cn%22%2Bs%2B%22%5Cn---------------%5Cn%22%2Co%2B%3Dh%2B%27%3Ca%20href%3D%22%27%2Bt%2B%27%22%20target%3D%22_blank%22%20aria-label%3D%22%27%2Bk%2B%27%22%3E%5Cud83d%5Cudd17%3C%2Fa%3E%20%3Clabel%20for%3D%22l%27%2Ba%2B%27%22%3ELinks%20to%3A%3C%2Flabel%3E%3Cinput%20id%3D%22l%27%2Ba%2B%27%22%20class%3D%22linkToCopy%22%20type%3D%22text%22%20value%3D%22%27%2Bt%2B%27%22%3E%20%3Cbutton%20class%3D%22showSnippet%22%20type%3D%22button%22%20aria-label%3D%22Show%20markup%20snippet%22%20aria-expanded%3D%22false%22%3E%3Ccode%3E%26lt%3B%2F%26gt%3B%3C%2Fcode%3E%3C%2Fbutton%3E%3Cdiv%20class%3D%22snippet%22%20hidden%3E%3Clabel%20for%3D%22snip%27%2Ba%2B%27%22%3EMarkup%20snippet%3C%2Flabel%3E%3Ctextarea%20id%3D%22snip%27%2Ba%2B%27%22%20aria-label%3D%22Markup%20snippet%20for%20this%20node%22%3E%27%2Bs%2B%27%3C%2Ftextarea%3E%3Cbutton%20type%3D%22button%22%20class%3D%22decrapulate%22%20aria-label%3D%22De-crapulate%20this%20markup%20snippet%22%3EDe-crapulate%3C%2Fbutton%3E%3C%2Fdiv%3E%3C%2Ftd%3E%27%2Co%2B%3D%27%3Ctd%3E%3Cbutton%20data-link-ref%3D%22%27%2Ba%2B%27%22%20class%3D%22highlightButton%22%20type%3D%22button%22%20aria-pressed%3D%22false%22%20aria-label%3D%22Highlight%20this%20issue%20on%20the%20page%20visually%22%3EShow%3C%2Fbutton%3E%3C%2Ftd%3E%27%2Co%2B%3D%22%3C%2Ftr%3E%22%2Ca%2B%2B%2C(b%7C%7Cp)%26%26l%2B%2B%2Cp%26%26(d%3Dd.split(%22%3Ccode%3E%22).join(%22%60%22).split(%22%3C%2Fcode%3E%22).join(%22%60%22).split(%22%3Cbr%3E%22).join(%22%5Cn%22).split(%22%5Cn%5Cn%22).join(%22%5Cn%22)%2Cconsole.log(d))%7D)%2Ci%3D%27%3Cstyle%3E%5Baria-pressed%3Dtrue%5D%7Bcolor%3Awhite%3Bbackground%3Adarkblue%3B%7Ddiv.issues%7Bfont-weight%3Abold%3B%7D%3Btextarea%20%7Bmargin%3A5px%200%3B%7D.snippet%20label%20%7Bfont-weight%3Abold%3Bfont-size%3A0.8em%3Bcolor%3Ablack%3B%7D.snippet%7Bbackground%3A%23efefef%3Boutline%3A1px%20solid%20%23666%3Bpadding%3A5px%3Bmargin-top%3A5px%3B%7D.checkDiffs%7Bbackground%3APapayaWhip%3B%7D.anDiff%7Bcolor%3Ared%3Bfont-weight%3Abold%3Bfont-size%3A10px%3Bdisplay%3Ablock%7D.warn%20%7Bbackground%3Alightyellow%3B%7D.err%20%7Bbackground%3APapayaWhip%3Bcolor%3Ared%3B%7D.visually-hidden%2C.a11y%2C.visuallyhidden%2C.sr-text%2C.sr-only%20%7Bclip-path%3A%20inset(100%25)%3Bclip%3A%20rect(1px%2C%201px%2C%201px%2C%201px)%3Bheight%3A%201px%3Boverflow%3A%20hidden%3Bposition%3A%20absolute%3Bwhite-space%3A%20nowrap%3Bwidth%3A%201px%3B%7D*%20%7B-webkit-box-sizing%3A%20border-box%3Bbox-sizing%3A%20border-box%3B%7Dhtml%20%7B%2F*border%3A%20.75em%20solid%20%23fff%3B*%2Fmin-height%3A%20100vh%3B%7Dbody%20%7Bbackground%3A%20%23f7f7f5%3Bcolor%3A%20%23333%3Bfont%3A%20400%20105%25%2F1.4%20%22Work%20Sans%22%2C%20sans-serif%3Bmargin%3A%201.5em%20auto%3Bmax-width%3A%2054em%3Bwidth%3A%2090%25%3B%7Da%3Alink%2Ca%3Avisited%20%7Bborder-bottom%3A%201px%20solid%20rgba(42%2C%20122%2C%20130%2C%20.5)%3Bcolor%3A%20%232b7a82%3Btext-decoration%3A%20none%3B%7Da%3Ahover%20%7Bborder-bottom%3A%202px%20solid%3Bcolor%3A%20%231e565c%3B%7Dbutton%3Afocus%2Ca%3Afocus%20%7Bbox-shadow%3A%20none%3Boutline-offset%3A%202px%3Boutline%3A%203px%20solid%20rgba(42%2C%20122%2C%20130%2C%20.75)%3B%7Da%3Afocus%20%7Bborder-bottom%3A%20none%3B%7Da%3Aactive%20%7Bbackground%3A%20%23333%3Bcolor%3A%20%23fff%3B%7Dcode%20%7Bfont-family%3A%20Consolas%2C%20monaco%2C%20monospace%3B-moz-tab-size%3A%204%3Btab-size%3A%204%3Btext-transform%3A%20none%3Bwhite-space%3A%20pre-wrap%3Bcolor%3Abrown%3B%7Dtextarea%20%7Bwidth%3A%20100%25%7Dlegend%20h2%2C%20legend%20h3%20%7Bmargin%3A%200%3B%7Dtable%20%7Bborder-collapse%3A%20collapse%3B%7Dth%2Ctd%20%7Bpadding%3A%2010px%3Bborder%3A2px%20solid%20%232b7a82%3B%7Dtable%20caption%20%7Bfont-weight%3A%20bold%3Btext-align%3A%20left%3Bmargin%3A1em%200%3B%7D%3C%2Fstyle%3E%3Ch1%3EList%20of%20links%20on%20this%20page.%3C%2Fh1%3E%27%2Ci%2B%3D%27%3Cinput%20type%3D%22checkbox%22%20id%3D%22showPotentialProblemsOnly%22%3E%3Clabel%20for%3D%22showPotentialProblemsOnly%22%3EShow%20only%20links%20where%20there%20*may*%20be%20issues%20(%27%2Bl%2B%22%20found)%3C%2Flabel%3E%22%2Ci%2B%3D%27%20%3Cbutton%20class%3D%22highlightButtonAll%22%20type%3D%22button%22%20aria-pressed%3D%22false%22%3EHighlight%20all%20links%20on%20page%3C%2Fbutton%3E%27%2Ci%2B%3D%27%3Ctable%20border%3D%221%22%20cellpadding%3D%225%22%3E%3Ccaption%3EAll%20links%20(anchors%20or%20elements%20with%20role%3D%22link%22)%20on%20this%20page%2C%20the%20accessible%20name%20and%20any%20issues%20found%3C%2Fcaption%3E%3Cthead%3E%3Ctr%20valign%3Dtop%3E%3Cth%3ELink%20type%3C%2Fth%3E%3Cth%20scope%3D%22col%22%3ELink%20text%3C%2Fth%3E%3Cth%20scope%3D%22col%22%3EAccessible%20name%3C%2Fth%3E%3Cth%20scope%3D%22col%22%3ENotes%3C%2Fth%3E%3Cth%3EHighlight%20on%20the%20page%3C%2Fth%3E%3C%2Ftr%3E%3C%2Fthead%3E%3Ctbody%3E%27%2Bo%2B%22%3C%2Ftbody%3E%3C%2Ftable%3E%22%2Ci%2B%3D%22%3Cscript%3Efunction%20showLinks()%7B%22%2Ci%2B%3D%22var%20refWindow%3Dwindow.opener%3B%22%2Ci%2B%3D%27var%20highlightButtons%3Ddocument.querySelectorAll(%22.highlightButton%22)%3Bvar%20linkToHighlight%3BArray.from(highlightButtons).forEach(highlightButton%20%3D%3E%20%7BhighlightButton.addEventListener(%22click%22%2C%20e%20%3D%3E%20%7BlinkToHighlight%3D%22%5Bdata-link-ref%3D%5C%27%22%20%2B%20highlightButton.getAttribute(%22data-link-ref%22)%20%2B%20%22%5C%27%5D%22%3Bif%20(highlightButton.getAttribute(%22aria-pressed%22)%3D%3D%3D%22false%22)%20%7BrefWindow.document.querySelector(linkToHighlight).focus()%3BrefWindow.document.querySelector(linkToHighlight).style.outline%3D%224px%20dashed%20darkblue%22%3BrefWindow.document.querySelector(linkToHighlight).style.outlineOffset%3D%22-4px%22%3BhighlightButton.setAttribute(%22aria-pressed%22%2C%22true%22)%3B%7D%20else%20%7BrefWindow.document.querySelector(linkToHighlight).style.outline%3D%22%22%3BhighlightButton.setAttribute(%22aria-pressed%22%2C%22false%22)%3B%7D%7D)%3B%7D)%3B%27%2Ci%2B%3D%27var%20highlightButtonAll%3Ddocument.querySelector(%22.highlightButtonAll%22)%3BhighlightButtonAll.addEventListener(%22click%22%2C%20e%20%3D%3E%20%7Bif%20(highlightButtonAll.getAttribute(%22aria-pressed%22)%3D%3D%3D%22false%22)%20%7BArray.from(highlightButtons).forEach(highlightButton%20%3D%3E%20%7BhighlightButton.setAttribute(%22aria-pressed%22%2C%22false%22)%3BhighlightButton.click()%3B%7D)%3BhighlightButtonAll.setAttribute(%22aria-pressed%22%2C%22true%22)%3B%7D%20else%20%7BArray.from(highlightButtons).forEach(highlightButton%20%3D%3E%20%7BhighlightButton.setAttribute(%22aria-pressed%22%2C%22true%22)%3BhighlightButton.click()%3B%7D)%3BhighlightButtonAll.setAttribute(%22aria-pressed%22%2C%22false%22)%3B%7D%7D)%3B%27%2Ci%2B%3D%27var%20linksToCopy%3Ddocument.querySelectorAll(%22.linkToCopy%22)%3BArray.from(linksToCopy).forEach(linkToCopy%20%3D%3E%20%7BlinkToCopy.addEventListener(%22focus%22%2C%20e%20%3D%3E%20%7BlinkToCopy.select()%3B%7D)%3B%7D)%3B%27%2Ci%2B%3D%27function%20hideGoodRows()%7BArray.from(trsWithoutIssue).forEach(trWithoutIssue%20%3D%3E%20%7BtrWithoutIssue.setAttribute(%22hidden%22%2C%22hidden%22)%3B%7D)%3B%7Dfunction%20showGoodRows()%7BArray.from(trsWithoutIssue).forEach(trWithoutIssue%20%3D%3E%20%7BtrWithoutIssue.removeAttribute(%22hidden%22)%3B%7D)%3B%7Dvar%20trsWithoutIssue%3Ddocument.querySelectorAll(%22tbody%20tr%3Anot(.issue)%22)%3Bvar%20showProblemCheckbox%3Ddocument.querySelector(%22%23showPotentialProblemsOnly%22)%3BshowProblemCheckbox.addEventListener(%22click%22%2C%20e%20%3D%3E%20%7Bif%20(showProblemCheckbox.checked)%20%7BhideGoodRows()%3B%7D%20else%20%7BshowGoodRows()%3B%7D%7D)%3B%27%2Ci%2B%3D%27%7Dwindow.addEventListener(%22load%22%2C%20(event)%20%3D%3E%20%7BshowLinks()%3B%7D)%3B%3C%5C%2Fscript%3E%27%2Ci%2B%3D%22%3Cscript%3E%22%2Ci%2B%3D%27var%20dcUrl%20%3D%20%22https%3A%2F%2Flloydi.com%2Fa11y-tools%2Fmarkup-de-crapulator%2Findex.html%3Fmarkup%3D%22%3B%27%2Ci%2B%3D%27const%20dcs%20%3D%20document.querySelectorAll(%22.decrapulate%22)%3B%27%2Ci%2B%3D%22Array.from(dcs).forEach(function%20(dc)%20%7B%22%2Ci%2B%3D%27dc.addEventListener(%22click%22%2C%20e%20%3D%3E%20%7B%27%2Ci%2B%3D%22var%20m%20%3D%20dc.previousElementSibling.value%3B%22%2Ci%2B%3D%22m%20%3D%20encodeURIComponent(m)%3B%22%2Ci%2B%3D%27window.open(dcUrl%20%2B%20m%2C%20%22dcWin%22%2C%20%22height%3D800%2Cwidth%3D1000%22)%3B%27%2Ci%2B%3D%22%7D)%3B%22%2Ci%2B%3D%22%7D)%3B%22%2Ci%2B%3D%27const%20sss%20%3D%20document.querySelectorAll(%22.showSnippet%22)%3B%27%2Ci%2B%3D%22Array.from(sss).forEach(function%20(ss)%20%7B%22%2Ci%2B%3D%27ss.addEventListener(%22click%22%2C%20e%20%3D%3E%20%7B%27%2Ci%2B%3D%22let%20n%20%3D%20ss.nextElementSibling%3B%22%2Ci%2B%3D%27if%20(ss.getAttribute(%22aria-expanded%22)%3D%3D%3D%22false%22)%20%7B%27%2Ci%2B%3D%27n.removeAttribute(%22hidden%22)%3B%27%2Ci%2B%3D%27ss.setAttribute(%22aria-expanded%22%2C%22true%22)%3B%27%2Ci%2B%3D%22%7D%20else%20%7B%22%2Ci%2B%3D%27n.setAttribute(%22hidden%22%2C%22hidden%22)%3B%27%2Ci%2B%3D%27ss.setAttribute(%22aria-expanded%22%2C%22false%22)%3B%27%2Ci%2B%3D%22%7D%22%2Ci%2B%3D%22%7D)%3B%22%2Ci%2B%3D%22%7D)%3B%22%2Ci%2B%3D%22%3C%5C%2Fscript%3E%22%3Bconst%20c%3Dwindow.open(%22%22%2C%22popUpWinLinks%22%2C%22height%3D800%2Cwidth%3D1000%22)%3Bc.document.open()%2Cc.document.write(i)%2Cc.document.close()%7D()%7D()%2Cconsole.log(%22%5CnSource%3A%20https%3A%2F%2Fa11y-tools.com%2Fbookmarklets%2F%5CnBookmarklet%20name%3A%20List%20links%5Cn%22)%3B
← Back to all bookmarklets