|
@@ -65,7 +65,53 @@ function isSameObject(object1, object2) {
|
|
return true
|
|
return true
|
|
}
|
|
}
|
|
|
|
|
|
-function focusNextFocusableNode(treeWalker) {
|
|
|
|
|
|
+function getAndFocusNextNodeWithClassName(className) {
|
|
|
|
+ const startNode = (document.activeElement || document.body)
|
|
|
|
+
|
|
|
|
+ const treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT)
|
|
|
|
+ treeWalker.currentNode = startNode
|
|
|
|
+
|
|
|
|
+ let targetNode = null
|
|
|
|
+
|
|
|
|
+ // eslint-disable-next-line
|
|
|
|
+ while(true) {
|
|
|
|
+ const nextNode = treeWalker.nextNode()
|
|
|
|
+ if (!nextNode) {
|
|
|
|
+ console.log('往下没找到')
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ if (nextNode.classList && [...nextNode.classList].some(item => item === className)) {
|
|
|
|
+ console.log('往下找到了')
|
|
|
|
+ targetNode = nextNode
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!targetNode && startNode !== document.body) {
|
|
|
|
+ treeWalker.currentNode = document.body
|
|
|
|
+ // eslint-disable-next-line
|
|
|
|
+ while(true) {
|
|
|
|
+ const nextNode = treeWalker.nextNode()
|
|
|
|
+ if (!nextNode) {
|
|
|
|
+ console.log('往上也没找到')
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ if (nextNode.classList && [...nextNode.classList].some(item => item === className)) {
|
|
|
|
+ console.log('网上找到了')
|
|
|
|
+ targetNode = nextNode
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (targetNode) {
|
|
|
|
+ targetNode.focus()
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return targetNode
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function __focusNextFocusableNode(treeWalker) {
|
|
// eslint-disable-next-line
|
|
// eslint-disable-next-line
|
|
while(true) {
|
|
while(true) {
|
|
const nextNode = treeWalker.nextNode()
|
|
const nextNode = treeWalker.nextNode()
|
|
@@ -89,7 +135,7 @@ function iterateOnFocusableNode(startNode, focusedNodeHandler) {
|
|
// console.log('起始节点可以focus')
|
|
// console.log('起始节点可以focus')
|
|
} else {
|
|
} else {
|
|
// console.log('起始节点不可以focus,focus到下一节点。')
|
|
// console.log('起始节点不可以focus,focus到下一节点。')
|
|
- const ret = focusNextFocusableNode(treeWalker)
|
|
|
|
|
|
+ const ret = __focusNextFocusableNode(treeWalker)
|
|
if (!ret) {
|
|
if (!ret) {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
@@ -97,7 +143,7 @@ function iterateOnFocusableNode(startNode, focusedNodeHandler) {
|
|
|
|
|
|
const iterator = () => {
|
|
const iterator = () => {
|
|
focusedNodeHandler(treeWalker.currentNode).then(() => {
|
|
focusedNodeHandler(treeWalker.currentNode).then(() => {
|
|
- const result = focusNextFocusableNode(treeWalker)
|
|
|
|
|
|
+ const result = __focusNextFocusableNode(treeWalker)
|
|
if (result) {
|
|
if (result) {
|
|
// console.log('遍历到下一个节点!')
|
|
// console.log('遍历到下一个节点!')
|
|
iterator()
|
|
iterator()
|
|
@@ -151,4 +197,5 @@ export default {
|
|
isSameObject,
|
|
isSameObject,
|
|
iterateOnFocusableNode,
|
|
iterateOnFocusableNode,
|
|
debounce,
|
|
debounce,
|
|
|
|
+ getAndFocusNextNodeWithClassName,
|
|
}
|
|
}
|