Я пишу фрагмент кода, который позволяет пользователю осуществлять поиск по элементу HTML на странице. Пользователь выбирает, какой элемент он хочет найти, а затем код пересекает каждый элемент, выделяя их один за другим. Код работает нормально, если пользователь ищет один элемент от начала до конца ... Однако, если в середине поиска одного элемента они переключают свой выбор на другой элемент, программа может начать сбой по разным причинам, но в первую очередь потому, что счетчик выходит за пределы скажем im для elementArray [4] (где count = 4) для одного входного элемента ... затем пользователь переключается на элемент таблицы (который может иметь всего 2 элемента в массиве), тогда индекс будет вне границ ..
Может кто-нибудь взглянуть на код и, возможно, предложить лучший способ реализации? Я думаю, что у меня должна быть отдельная функция, чтобы иметь дело со сценарием, когда пользователь переключает выбор элемента в середине поиска другого элемента ??
Спасибо
[{
type: 'select',
id: 'findNext',
label: 'Find next :',
isChanged: false,
labelLayout: 'horizontal',
accessKey: 'R',
items: [
['Form', 'form'],
['Input', 'input'], // Checkbox, radio, textfield, button, image
['Table', 'table'],
['Textarea', 'textarea'],
['Select', 'select'],
['Anchor', 'a'], // [option, ]
['Image', 'img']
],
}, {
type: 'button',
align: 'left',
style: 'width:100%',
label: 'Find Next',
id: 'findX',
onClick: function () {
var dialog = this.getDialog();
if (typeof currentElement != 'undefined') {
x = currentElement;
x.removeAttribute('style'); // Remove the highlight from the current element
}
if (count != null) {
count++;
} else {
count = 0;
}
if (selectOptionArray == null) {
selectOptionArray = new Array();
}
var selectOption = dialog.getValueOf('find', 'findNext'); // Get user selection e.g input, table etc
elementArray = documentNode.getElementsByTagName(selectOption);
currentElement = elementArray[count]; // Keep a reference of the current choice so the higlight can be removed on line 7
getSelection();
function getSelection() {
if (count > 0) { // Check if there are two elements to compare
areElementsSame();
}
if ((elementArray.length > 0) && (count < elementArray.length)) { // Is count out of bounds?
nextElement(count, elementArray);
} else {
alert("Search complete..No elements exist.");
count = null;
}
}
function areElementsSame() {
if (count >= elementArray.length) {
count = 0;
nextElement(count, elementArray);
} else if (elementArray[count].nodeName == x.nodeName) {
nextElement(count, elementArray);
} else {
count = 0;
nextElement(count, elementArray);
}
}
function nextElement() {
if (count < elementArray.length) {
elementArray[count].setAttribute('style', 'background-color: blue');
elementArray[count].scrollIntoView(true);
} else {
alert('count is > elementArray.length, all elements navigated');
}
}
}