diff --git a/core/src/utils/helpers.ts b/core/src/utils/helpers.ts
index da8b938975..d0f3add90f 100644
--- a/core/src/utils/helpers.ts
+++ b/core/src/utils/helpers.ts
@@ -133,7 +133,7 @@ export const getAriaLabel = (componentEl: HTMLElement, inputId: string): { label
: inputId + '-lbl';
let label = labelledBy !== null && labelledBy.trim() !== ''
- ? document.querySelector(`#${labelledBy}`)
+ ? document.getElementById(labelledBy)
: findItemLabel(componentEl);
if (label) {
@@ -147,10 +147,15 @@ export const getAriaLabel = (componentEl: HTMLElement, inputId: string): { label
// if there is no label, check to see if the user has provided
// one by setting an id on the component and using the label element
} else if (componentId.trim() !== '') {
- label = document.querySelector(`label[for=${componentId}]`);
+ label = document.querySelector(`label[for="${componentId}"]`);
if (label) {
- label.id = labelId = `${componentId}-lbl`;
+ if (label.id !== '') {
+ labelId = label.id;
+ } else {
+ label.id = labelId = `${componentId}-lbl`;
+ }
+
labelText = label.textContent;
}
}
diff --git a/core/src/utils/test/aria.spec.ts b/core/src/utils/test/aria.spec.ts
new file mode 100644
index 0000000000..4990cc2608
--- /dev/null
+++ b/core/src/utils/test/aria.spec.ts
@@ -0,0 +1,96 @@
+import { newSpecPage } from '@stencil/core/testing';
+import { getAriaLabel } from '../helpers';
+import { Item } from '../../components/item/item.tsx';
+import { Label } from '../../components/label/label.tsx';
+import { Toggle } from '../../components/toggle/toggle.tsx';
+
+describe('getAriaLabel()', () => {
+ it('should correctly link component to label', async () => {
+ const page = await newSpecPage({
+ components: [Item, Label, Toggle],
+ html: `
+