Skip to content

Commit

Permalink
capricorn86#1221@minor: Add support for :target pseudo selector.
Browse files Browse the repository at this point in the history
# Bitte geben Sie eine Commit-Beschreibung für Ihre Änderungen ein. Zeilen, die
# mit '#' beginnen, werden beibehalten; wenn Sie möchten, können Sie diese entfernen.
# Eine leere Beschreibung bricht den Commit ab.
#
# Datum:            Wed Jan 24 11:49:59 2024 +0100
#
# Auf Branch task/1221-add-support-for-target-and-target-within
# Ihr Branch ist 1 Commit vor 'origin/task/1221-add-support-for-target-and-target-within'.
#   (benutzen Sie "git push", um lokale Commits zu publizieren)
#
# Zum Commit vorgemerkte Änderungen:
#	geändert:       src/query-selector/SelectorItem.ts
#	geändert:       test/query-selector/QuerySelector.test.ts
#
# Änderungen, die nicht zum Commit vorgemerkt sind:
#	geändert:       test/query-selector/QuerySelector.test.ts
#
  • Loading branch information
René Schleusner committed Jan 24, 2024
1 parent b7403cc commit f96ccac
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
6 changes: 6 additions & 0 deletions packages/happy-dom/src/query-selector/SelectorItem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,12 @@ export default class SelectorItem {
.reverse()
.indexOf(element);
return nthLastOfTypeIndex !== -1 && psuedo.nthFunction(nthLastOfTypeIndex + 1);
case 'target':
const hash = element[PropertySymbol.ownerDocument].location.hash;
if (!hash) {
return false;
}
return element.isConnected && element.id === hash.slice(1);
}
}

Expand Down
25 changes: 25 additions & 0 deletions packages/happy-dom/test/query-selector/QuerySelector.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1109,6 +1109,31 @@ describe('QuerySelector', () => {
expect(div.querySelector('#id') === div2).toBe(true);
});

it('Returns an element matching :target', () => {
const section = document.createElement('section');
const headline = document.createElement('h2');
headline.id = 'id';
section.appendChild(headline);
document.appendChild(section);

window.location.hash = '#id';
expect(section.querySelector(':target')).toBe(headline);
expect(section.querySelector('h2:target')).toBe(headline);
expect(section.querySelector('h3:target')).toBeNull();

window.location.hash = '#something-else';
expect(section.querySelector(':target')).toBeNull();
expect(section.querySelector('h2:target')).toBeNull();
expect(section.querySelector('h3:target')).toBeNull();

// Detached Elements should not match
window.location.hash = '#id';
section.remove();
expect(section.querySelector(':target')).toBeNull();
expect(section.querySelector('h2:target')).toBeNull();
expect(section.querySelector('h3:target')).toBeNull();
});

it('Returns an element by id matching "#:id:".', () => {
const div = document.createElement('div');
const div2 = document.createElement('div');
Expand Down

0 comments on commit f96ccac

Please sign in to comment.