2015-03-09 2 views
0

Я пишу html с javascript динамически и сохраняю его в массиве.Найти индекс элемента в массиве, где элемент содержит подстроку

["<div id="findme_u_13" name="someone" ><span style="… id="null" width="15px" height="15px"/></a></div>", "<div id="findme_u_1106" name="anotherone" ><span s… id="null" width="15px" height="15px"/></a></div>"] 

После этого я хочу иметь возможность определять индекс полного элемента, который содержит ie findme_u_somenumber.

Я просмотрел метод indexof, но, очевидно, этого не делает. Причина, по которой я хочу сохранить html, заключается в ускорении добавления в Dom и повторении создания Html снова и снова. Есть ли быстрый способ поиска через 1000 строк в массиве и вернуть индекс строки, содержащей значение?

+0

Конечно, я могу придумать то, что будет делать именно то, что вы просите, но зачем хранить HTML в массиве. Должен быть более хороший способ сделать это? – Mouser

+0

Почему не работает цикл for? –

+0

html необходим для формирования onelinelist в чате-приложении. Когда клиент подключается, он получает (по дизайну) список пользователей, которые в настоящее время находятся в логин-канале. Когда пользователь переключает канал, весь узел, содержащий html, удаляется, и новый html записывается и добавляется. Когда в канале есть много пользователей, я нахожу, что это занимает много времени. Поэтому моя идея состояла в том, чтобы сохранить начальный массив пользователей в массиве и использовать его. Затем изменения происходят сокета-обновления для добавления/удаления узлов из этого массива. Надеюсь, что я несколько ясен? :-) – ingridsede

ответ

0

Найден простой способ сделать это и просто сцепляются строки от HTML в переменной, а затем добавив его в innerHTML к DOMNode. Гораздо быстрее, чем цикл, создание и добавление. ;-)

Для выбора u_number я узнал, что это статическое число, принадлежащее клиенту, поэтому его легко выбрать.

Спасибо, что за помощь.

0

Вы можете поместить HTML внутри массива в node и использовать queryselector для его получения. Таким образом, вы можете перемещать этот бит HTML в память. Это дает решение вопроса:

var html_array = ['<div id="findme_u_13" name="someone" ><span id="null" width="15px" height="15px"></span></div>', '<div id="findme_u_1106" name="anotherone" ><span id="null" width="15px" height="15px"></span></div>']; 
 

 
function retrieveIndexFromArray(indexNumber) 
 
{ 
 
    var elementFound = -1; // 
 
    var div = document.createElement("div"); //create an in-memory node. 
 
    div.innerHTML = html_array.join(""); //add the string to it. 
 
    var element = div.querySelector("#findme_u_"+indexNumber) 
 
    if (element) //test if the string matches the index requested. 
 
    { 
 
     elementFound = element; //save the element 
 

 
    } 
 
console.log(element) 
 
    return element; //return the element; 
 
} 
 

 
document.body.innerHTML += "Found element: " + retrieveIndexFromArray(13).outerHTML.replace(/</g, "&lt;").replace(/>/g, "&gt;"); //result

Я хочу знать, почему ваш заготавливают HTML в массиве. Почему бы не сохранить ссылку в массиве и использовать шаблон HTML, чтобы заполнить его правильными данными.

+0

Число, стоящее за _u, - это число, назначенное для создания учетной записи с помощью автоинкремента в базе данных. редактирование .... я вижу теперь, что он делает то, что я хочу, я думаю. Я сейчас посмотрю, если это ускорит все. – ingridsede

+0

Когда значения находятся в одном столбце, ваш код работает. Однако html помещается в массив с двойными записями. – ingridsede

0

indexOf обязательно работа. Я думаю, проблема заключается в том, что вы используете двойные кавычки для разделения ваших элементов, когда вам нужно использовать одинарные кавычки (из-за двойных кавычек в HTML). Это возвращает индекс или false.

function findThis(arr, id) { 
    for (var i = 0, len = arr.length; i < len; i++) { 
     if (arr[i].indexOf(id) > -1) return i; 
    } 
    return false 
} 

findThis(arr, 'findme_u_1106') // 1 

DEMO

+0

Нашел мою ошибку мышления: mixed 'Array.prototype.indexOf' с' String.prototype.indexOf', вы используете последнюю. – Mouser

Смежные вопросы