Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Поиск по таблице (https://javascript.ru/forum/dom-window/61778-poisk-po-tablice.html)

santey12 08.03.2016 11:16

Поиск по таблице
 
Всем, доброго времени суток!
Возникли трудности при поиске в таблице:
  1. Не получается организовать поиск по <select>-ам
  2. Перемещение нескольких одинаковых строк.
<p align="middle"><input id="srch" type="text" class="srch" value="Введите текст для поиска" onfocus="this.value=''"><button id="btn" class="button">Поиск</button></p>
<script src="js/tbl.js"></script>
<table id="tbl" border="1" >
<thead>
<tr><th>Номер строки</th><th>Марка</th><th>Тип кузова</th><th>Дата</th><th>Количество</th><th>Статус</th></tr>
</thead>
<tbody>
<tr><td>1</td><td>Хендай</td><td>универсал</td><td value="2016-01-01">2016-01-01</td><td>11</td><td><select><option value="Open">Open</option><option value="In progress">In progress</option><option selected value="Resolved">Resolved</option></select></td></tr>
<tr><td>2</td><td>Тойта</td><td>седан</td><td value="2016-02-01">2016-02-01</td><td>10</td><td><select><option selected value="Open">Open</option><option value="In progress">In progress</option><option value="Resolved">Resolved</option></select></td></tr>
<tr><td>3</td><td>Лада</td><td>седан</td><td value="2016-03-01">2016-03-01</td><td>300</td><td><select><option selected value="Open">Open</option><option value="In progress">In progress</option><option value="Resolved">Resolved</option></select></td></tr>
<tr><td>4</td><td>Форд</td><td>хэтчбек</td><td value="2016-04-01">2016-04-01</td><td>120</td><td><select><option value="Open">Open</option><option selected value="In progress">In progress</option><option value="Resolved">Resolved</option></select></td></tr>
<tr><td>5</td><td>Шкода</td><td>лифтбэк</td><td value="2016-05-01">2016-05-01</td><td>99</td><td><select><option value="Open">Open</option><option value="In progress">In progress</option><option selected value="Resolved">Resolved</option></select></td></tr>
</tbody>
</table>

function search(searchWord){ //создание функции 
	for(var i = 1, l = tbl.rows.length; i < l; i++){ //перебор столбцов по длине 
		for(var j = 0, l1 = tbl.rows[i].cells.length; j < l1; j++){ //перебор ячеек 
			if(tbl.rows[i].cells[j].innerHTML.indexOf(searchWord) +1){ //если длина и ячейки совпадают, то перемещаем строку на первую позицию  
				var clone = tbl.rows[i].cloneNode(true);
				tbl.rows[i].parentNode.removeChild(tbl.rows[i]);
				tbl.rows[1].parentNode.insertBefore(clone, tbl.rows[1]);
				tbl.rows[1].style.backgroundColor = 'paleturquoise'; //изменяем первой/найденной ячейки 
				tbl.rows[2].style.backgroundColor = 'white'; //изменяем цвет второй ячейки 
				return true;
			}
		}
	}
}

btn.onclick = function(){ //присваиваем кнопке функцию 
	search(srch.value)
}

Так же можно посмотреть на http://jsfiddle.net/rhLv99nz/9/

рони 08.03.2016 12:08

santey12,
если несколько строк совпадают с поиском, которая будет выше?

santey12 08.03.2016 12:13

Та строка, которая стоит первой в таблице.

рони 08.03.2016 12:56

santey12,
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <style type="text/css">
        .search tbody tr:nth-child(1) {
            background-color: paleturquoise;
        }
    </style>

    <title></title>

    <script>
        window.onload = function() {
            function search(searchWord) { //создание функции
                tbl.classList.remove("search");
                if(!searchWord) return;
                for (var i = 1, l = tbl.rows.length; i < l; i++) { //перебор столбцов по длинне
                    for (var j = 0, l1 = tbl.rows[i].cells.length - 1; j < l1; j++) { //перебор ячеек
                        if (~tbl.rows[i].cells[j].innerHTML.indexOf(searchWord) || ~tbl.rows[i].querySelector('select').value.indexOf(searchWord)) { //если длинна??? и ячейки совпадают, то перемещаем строку на первую позицию
                            tbl.rows[1].parentNode.insertBefore(tbl.rows[i], tbl.rows[1]);
                            tbl.classList.add("search")
                            return true;
                        }
                    }
                }
            }

            btn.onclick = function() { //присваиваем кнопке функцию
                search(srch.value)
            }
        }
    </script>


</head>

<body>
    <p align="middle">
        <input id="srch" type="text" class="srch" value="Введите текст для поиска" onfocus="this.value=''">
        <button id="btn" class="button">Поиск</button>
    </p>
    <script src="js/tbl.js"></script>
    <table id="tbl" border="1">
        <thead>
            <tr>
                <th>Номер строки</th>
                <th>Марка</th>
                <th>Тип кузова</th>
                <th>Дата</th>
                <th>Количество</th>
                <th>Статус</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1</td>
                <td>Хендай</td>
                <td>универсал</td>
                <td value="2016-01-01">2016-01-01</td>
                <td>11</td>
                <td>
                    <select>
                        <option value="Open">Open</option>
                        <option value="In progress">In progress</option>
                        <option selected value="Resolved">Resolved</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>2</td>
                <td>Тойта</td>
                <td>седан</td>
                <td value="2016-02-01">2016-02-01</td>
                <td>10</td>
                <td>
                    <select>
                        <option selected value="Open">Open</option>
                        <option value="In progress">In progress</option>
                        <option value="Resolved">Resolved</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>3</td>
                <td>Лада</td>
                <td>седан</td>
                <td value="2016-03-01">2016-03-01</td>
                <td>300</td>
                <td>
                    <select>
                        <option selected value="Open">Open</option>
                        <option value="In progress">In progress</option>
                        <option value="Resolved">Resolved</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>4</td>
                <td>Форд</td>
                <td>хэтчбек</td>
                <td value="2016-04-01">2016-04-01</td>
                <td>120</td>
                <td>
                    <select>
                        <option value="Open">Open</option>
                        <option selected value="In progress">In progress</option>
                        <option value="Resolved">Resolved</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>5</td>
                <td>Шкода</td>
                <td>лифтбэк</td>
                <td value="2016-05-01">2016-05-01</td>
                <td>99</td>
                <td>
                    <select>
                        <option value="Open">Open</option>
                        <option value="In progress">In progress</option>
                        <option selected value="Resolved">Resolved</option>
                    </select>
                </td>
            </tr>
        </tbody>
    </table>

</body>

</html>

santey12 08.03.2016 13:07

рони,
Не совсем понял, чем Ваш пример лучше моего?

Cuntmann 08.03.2016 13:12

Друзья, не пишите слово "длина" с двумя буквами "н"! Сюда же и дети ходят!

santey12 08.03.2016 13:16

Cuntmann,
Прошу прощения, но лучше бы Вы по делу написали;)

destus 08.03.2016 13:26

santey12,
return true в вашей функции уберите и будет вам счастье. Осталось только одинаковые строки отсортировать.

Cuntmann 08.03.2016 13:33

Это и есть по делу!

рони 08.03.2016 13:50

понятно нужна обычная сортировка строк с выделением при совпадении в поиске ... осталось только дождаться когда ТС придумает приоритеты сортировки

santey12 08.03.2016 14:39

destus,
не могли бы Вы мне объяснить почему, после того, как я убираю "return true" поиск становится точнее?

destus 08.03.2016 14:43

santey12,
потому что return прерывает дальнейшее выполнение функции. Нашли первое совпадение => return true => выход из функции, хотя совпадения ещё были.
Если функция из себя ничего интересного не представляет, и не должна возвращать какое-то выражение, можно вообще return не использовать. Пусть она возвращает undefined.

santey12 08.03.2016 14:50

destus, еще хотел спросить, для сортировки лучше использовать новую функцию или продолжить работу с моей?

рони 08.03.2016 14:56

Поиск по строкам таблицы
 
santey12,
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <style type="text/css">
         tbody tr.search {
            background-color: paleturquoise;
        }
    </style>

    <title></title>

    <script>
window.onload = function() {
    function b(d) {
        var b = 1;
        [].forEach.call(e, function(a) {
            a.classList.remove("search");
            [].some.call(a.querySelectorAll("td"), function(a) {
                var b = a.querySelector("select");
                return  b ? ~b.value.indexOf(d) : ~a.innerHTML.indexOf(d)
            }) ? (d && a.classList.add("search"), c.insertBefore(a, tbl.rows[b++])) : c.appendChild(a)
        })
    }
    var c = document.querySelector("#tbl tbody"),
        e = c.querySelectorAll("tr");
    btn.onclick = function() {
        b(srch.value)
    }
};
    </script>


</head>

<body>
    <p align="middle">
        <input id="srch" type="text" class="srch" value="Введите текст для поиска" onfocus="this.value=''">
        <button id="btn" class="button">Поиск</button>
    </p>
    <script src="js/tbl.js"></script>
    <table id="tbl" border="1">
        <thead>
            <tr>
                <th>Номер строки</th>
                <th>Марка</th>
                <th>Тип кузова</th>
                <th>Дата</th>
                <th>Количество</th>
                <th>Статус</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1</td>
                <td>Хендай</td>
                <td>универсал</td>
                <td value="2016-01-01">2016-01-01</td>
                <td>11</td>
                <td>
                    <select>
                        <option value="Open">Open</option>
                        <option value="In progress">In progress</option>
                        <option selected value="Resolved">Resolved</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>2</td>
                <td>Тойта</td>
                <td>седан</td>
                <td value="2016-02-01">2016-02-01</td>
                <td>10</td>
                <td>
                    <select>
                        <option selected value="Open">Open</option>
                        <option value="In progress">In progress</option>
                        <option value="Resolved">Resolved</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>3</td>
                <td>Лада</td>
                <td>седан</td>
                <td value="2016-03-01">2016-03-01</td>
                <td>300</td>
                <td>
                    <select>
                        <option selected value="Open">Open</option>
                        <option value="In progress">In progress</option>
                        <option value="Resolved">Resolved</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>4</td>
                <td>Форд</td>
                <td>хэтчбек</td>
                <td value="2016-04-01">2016-04-01</td>
                <td>120</td>
                <td>
                    <select>
                        <option value="Open">Open</option>
                        <option selected value="In progress">In progress</option>
                        <option value="Resolved">Resolved</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>5</td>
                <td>Шкода</td>
                <td>лифтбэк</td>
                <td value="2016-05-01">2016-05-01</td>
                <td>99</td>
                <td>
                    <select>
                        <option value="Open">Open</option>
                        <option value="In progress">In progress</option>
                        <option selected value="Resolved">Resolved</option>
                    </select>
                </td>
            </tr>
        </tbody>
    </table>

</body>

</html>

destus 08.03.2016 14:57

santey12,
Мне кажется что в этой же будет оптимальнее.

santey12 08.03.2016 15:09

рони, не совсем понимаю, как происходит выделение найденных строк?

рони 08.03.2016 15:25

santey12,
если в одной из ячеек строки есть совпадение по тексту или в селекторе и значение поиска существует, присваивается класс - строка 23 -- есть совпадение или нет вычислят строки 20 - 23

santey12 08.03.2016 15:26

Если в поиске задать "2", то он выделит всю таблицу, т.к поле "дата" начинается с "2".

рони 08.03.2016 15:53

santey12,
и чего?
Цитата:

Сообщение от рони
осталось только дождаться когда ТС придумает приоритеты сортировки


рони 08.03.2016 15:55

santey12,
или используйте регу для точного совпадения

santey12 08.03.2016 15:57

рони, дык в этом у меня и есть проблема, а то что предложили Вы это, конечно хорошо, но какой смысл, если у меня работает практически так же?

santey12 08.03.2016 15:59

Цитата:

Сообщение от рони (Сообщение 410293)
santey12,
или используйте регу для точного совпадения

Можно по подробней?:help:

рони 08.03.2016 16:16

santey12,
строка 29 здесь http://javascript.ru/forum/css-html/...tml#post372707

рони 08.03.2016 16:25

Точный поиск по строкам таблицы
 
santey12,
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <style type="text/css">
         tbody tr.search {
            background-color: paleturquoise;
        }
    </style>

    <title></title>

    <script>
window.onload = function() {
    function b(d) {
        var b = 1;
        [].forEach.call(e, function(a) {
            a.classList.remove("search");
            [].some.call(a.querySelectorAll("td"), function(a) {
                var b = a.querySelector("select"), r = new RegExp("^" +d+"$", "ig");
                return  b ? r.test(b.value) : r.test(a.innerHTML)
            }) ? (d && a.classList.add("search"), c.insertBefore(a, tbl.rows[b++])) : c.appendChild(a)
        })
    }
    var c = document.querySelector("#tbl tbody"),
        e = c.querySelectorAll("tr");
    btn.onclick = function() {
        b(srch.value)
    }
};
    </script>


</head>

<body>
    <p align="middle">
        <input id="srch" type="text" class="srch" value="Введите текст для поиска" onfocus="this.value=''">
        <button id="btn" class="button">Поиск</button>
    </p>
    <script src="js/tbl.js"></script>
    <table id="tbl" border="1">
        <thead>
            <tr>
                <th>Номер строки</th>
                <th>Марка</th>
                <th>Тип кузова</th>
                <th>Дата</th>
                <th>Количество</th>
                <th>Статус</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1</td>
                <td>Хендай</td>
                <td>универсал</td>
                <td value="2016-01-01">2016-01-01</td>
                <td>11</td>
                <td>
                    <select>
                        <option value="Open">Open</option>
                        <option value="In progress">In progress</option>
                        <option selected value="Resolved">Resolved</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>2</td>
                <td>Тойта</td>
                <td>седан</td>
                <td value="2016-02-01">2016-02-01</td>
                <td>10</td>
                <td>
                    <select>
                        <option selected value="Open">Open</option>
                        <option value="In progress">In progress</option>
                        <option value="Resolved">Resolved</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>3</td>
                <td>Лада</td>
                <td>седан</td>
                <td value="2016-03-01">2016-03-01</td>
                <td>300</td>
                <td>
                    <select>
                        <option selected value="Open">Open</option>
                        <option value="In progress">In progress</option>
                        <option value="Resolved">Resolved</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>4</td>
                <td>Форд</td>
                <td>хэтчбек</td>
                <td value="2016-04-01">2016-04-01</td>
                <td>120</td>
                <td>
                    <select>
                        <option value="Open">Open</option>
                        <option selected value="In progress">In progress</option>
                        <option value="Resolved">Resolved</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>5</td>
                <td>Шкода</td>
                <td>лифтбэк</td>
                <td value="2016-05-01">2016-05-01</td>
                <td>99</td>
                <td>
                    <select>
                        <option value="Open">Open</option>
                        <option value="In progress">In progress</option>
                        <option selected value="Resolved">Resolved</option>
                    </select>
                </td>
            </tr>
        </tbody>
    </table>

</body>

</html>

santey12 08.03.2016 16:26

рони, а нельзя сделать выделение через ".style.backgroundColor", что бы при выполнении повторного поиска, результаты прошлого запроса теряли свое выделение. У меня это было реализовано, с помощью:
tbl.rows[1].style.backgroundColor = 'paleturquoise';
tbl.rows[2].style.backgroundColor = 'white';

Но это не эффективно при выделение двух одинаковых строк

рони 08.03.2016 16:42

Цитата:

Сообщение от santey12
результаты прошлого запроса теряли свое выделение.

так они и теряют ... что не так?

santey12 08.03.2016 17:01

рони, в Вашем коде, мне что-то сложно разобраться, поэтому хотел через ".style.backgroundColor"

рони 08.03.2016 17:05

santey12,
понятно, увы помочь более не могу, рекомендую обратится к destus

destus 08.03.2016 18:16

santey12,
Через documentFragment ваш скрипт переделал. Протестируйте и напишите результат.
<p align="middle"><input id="srch" type="text" class="srch" value="Введите текст для поиска" onfocus="this.value=''"><button id="btn" class="button">Поиск</button></p>
    <script src="js/tbl.js"></script>
    <table id="tbl" border="1">
        <thead>
            <tr><th>Номер строки</th><th>Марка</th><th>Тип кузова</th><th>Дата</th><th>Количество</th><th>Статус</th></tr>
        </thead>
        <tbody>
            <tr><td>1</td><td>Хендай</td><td>универсал</td><td value="2016-01-01">2016-01-01</td><td>11</td><td><select><option value="Open">Open</option><option value="In progress">In progress</option><option selected value="Resolved">Resolved</option></select></td></tr>
            <tr><td>2</td><td>Тойта</td><td>седан</td><td value="2016-02-01">2016-02-01</td><td>10</td><td><select><option selected value="Open">Open</option><option value="In progress">In progress</option><option value="Resolved">Resolved</option></select></td></tr>
            <tr><td>3</td><td>Лада</td><td>седан</td><td value="2016-03-01">2016-03-01</td><td>300</td><td><select><option selected value="Open">Open</option><option value="In progress">In progress</option><option value="Resolved">Resolved</option></select></td></tr>
            <tr><td>4</td><td>Форд</td><td>хэтчбек</td><td value="2016-04-01">2016-04-01</td><td>120</td><td><select><option value="Open">Open</option><option selected value="In progress">In progress</option><option value="Resolved">Resolved</option></select></td></tr>
            <tr><td>5</td><td>Шкода</td><td>лифтбэк</td><td value="2016-05-01">2016-05-01</td><td>99</td><td><select><option value="Open">Open</option><option value="In progress">In progress</option><option selected value="Resolved">Resolved</option></select></td></tr>
        </tbody>
    </table>
    <script>
        function search(searchWord) { //создание функции 
            var fragment = document.createDocumentFragment(),
                deleteArr = [];
            for (var i = 1, l = tbl.rows.length; i < l; i++) { //перебор столбцов по длине 
                for (var j = 0, l1 = tbl.rows[i].cells.length; j < l1; j++) { //перебор ячеек 
                    if (tbl.rows[i].cells[j].innerHTML.indexOf(searchWord) + 1) { //если длина и ячейки совпадают, то перемещаем строку на первую позицию  
                        var clone = tbl.rows[i].cloneNode(true);
                        deleteArr.push(i);
                        fragment.appendChild(clone);
                    }
                }
                tbl.rows[i].style.backgroundColor = 'white';
            }
            if (fragment.childNodes.length != 0) {
                for (var i = 1, l = tbl.rows.length; i < l; i++) {
                    if (deleteArr.indexOf(i) == -1) {
                        var clone = tbl.rows[i].cloneNode(true);
                        fragment.appendChild(clone);
                    }
                }
                i = tbl.rows.length;
                while (i-- > 1) {
                    tbl.rows[i].parentNode.removeChild(tbl.rows[i]);
                }
                tbl.appendChild(fragment);
                tbl.rows[1].style.backgroundColor = 'paleturquoise'; //изменяем первой/найденной ячейки 
            }            
        }

        btn.onclick = function () { //присваиваем кнопке функцию 
            search(srch.value)
        }
    </script>

santey12 08.03.2016 18:21

destus,
что-то совсем плохо работает... Клонирует ячейки...

destus 08.03.2016 18:31

santey12,
а так?
<p align="middle"><input id="srch" type="text" class="srch" value="Введите текст для поиска" onfocus="this.value=''"><button id="btn" class="button">Поиск</button></p>
    <script src="js/tbl.js"></script>
    <table id="tbl" border="1">
        <thead>
            <tr><th>Номер строки</th><th>Марка</th><th>Тип кузова</th><th>Дата</th><th>Количество</th><th>Статус</th></tr>
        </thead>
        <tbody>
            <tr><td>1</td><td>Хендай</td><td>универсал</td><td value="2016-01-01">2016-01-01</td><td>11</td><td><select><option value="Open">Open</option><option value="In progress">In progress</option><option selected value="Resolved">Resolved</option></select></td></tr>
            <tr><td>2</td><td>Тойта</td><td>седан</td><td value="2016-02-01">2016-02-01</td><td>10</td><td><select><option selected value="Open">Open</option><option value="In progress">In progress</option><option value="Resolved">Resolved</option></select></td></tr>
            <tr><td>3</td><td>Лада</td><td>седан</td><td value="2016-03-01">2016-03-01</td><td>300</td><td><select><option selected value="Open">Open</option><option value="In progress">In progress</option><option value="Resolved">Resolved</option></select></td></tr>
            <tr><td>4</td><td>Форд</td><td>хэтчбек</td><td value="2016-04-01">2016-04-01</td><td>120</td><td><select><option value="Open">Open</option><option selected value="In progress">In progress</option><option value="Resolved">Resolved</option></select></td></tr>
            <tr><td>5</td><td>Шкода</td><td>лифтбэк</td><td value="2016-05-01">2016-05-01</td><td>99</td><td><select><option value="Open">Open</option><option value="In progress">In progress</option><option selected value="Resolved">Resolved</option></select></td></tr>
        </tbody>
    </table>
    <script>
        function search(searchWord) { //создание функции 
            var idx = 0;
            for (var i = 1, l = tbl.rows.length; i < l; i++) { //перебор столбцов по длине 
                for (var j = 0, l1 = tbl.rows[i].cells.length; j < l1; j++) { //перебор ячеек 
                    if (tbl.rows[i].cells[j].innerHTML.indexOf(searchWord) + 1) { //если длина и ячейки совпадают, то перемещаем строку на первую позицию  
                        idx++;
                        var clone = tbl.rows[i].cloneNode(true);
                        tbl.rows[i].parentNode.removeChild(tbl.rows[i]);
                        tbl.rows[1].parentNode.insertBefore(clone, tbl.rows[idx]);
                        tbl.rows[1].style.backgroundColor = 'paleturquoise'; //изменяем первой/найденной ячейки 
                        tbl.rows[2].style.backgroundColor = 'white'; //изменяем цвет второй ячейки 
                    }
                }
            }
        }

        btn.onclick = function () { //присваиваем кнопке функцию 
            search(srch.value)
        }
    </script>

santey12 08.03.2016 19:22

Тdestus, так работает! В чем была проблема?
П.С. Так же как и у Рони, при поиске "2" он ищет все элементы в таблице содержащие двойку, с помощью RegExp у меня не получилось реализовать...

santey12 08.03.2016 19:24

destus, работает, но не совсем верно, т.к он выделяет первую строку, а вторую закрашивает, поэтому если искать две одинаковые строки, то получается не совсем верно, у меня было так сделано в начале...

destus 08.03.2016 19:31

Цитата:

Сообщение от santey12 (Сообщение 410326)
destus, работает, но не совсем верно, т.к он выделяет первую строку, а вторую закрашивает, поэтому если искать две одинаковые строки, то получается не совсем верно, у меня было так сделано в начале...

<p align="middle"><input id="srch" type="text" class="srch" value="Введите текст для поиска" onfocus="this.value=''"><button id="btn" class="button">Поиск</button></p>
    <script src="js/tbl.js"></script>
    <table id="tbl" border="1">
        <thead>
            <tr><th>Номер строки</th><th>Марка</th><th>Тип кузова</th><th>Дата</th><th>Количество</th><th>Статус</th></tr>
        </thead>
        <tbody>
            <tr><td>1</td><td>Хендай</td><td>универсал</td><td value="2016-01-01">2016-01-01</td><td>11</td><td><select><option value="Open">Open</option><option value="In progress">In progress</option><option selected value="Resolved">Resolved</option></select></td></tr>
            <tr><td>2</td><td>Тойта</td><td>седан</td><td value="2016-02-01">2016-02-01</td><td>10</td><td><select><option selected value="Open">Open</option><option value="In progress">In progress</option><option value="Resolved">Resolved</option></select></td></tr>
            <tr><td>3</td><td>Лада</td><td>седан</td><td value="2016-03-01">2016-03-01</td><td>300</td><td><select><option selected value="Open">Open</option><option value="In progress">In progress</option><option value="Resolved">Resolved</option></select></td></tr>
            <tr><td>4</td><td>Форд</td><td>хэтчбек</td><td value="2016-04-01">2016-04-01</td><td>120</td><td><select><option value="Open">Open</option><option selected value="In progress">In progress</option><option value="Resolved">Resolved</option></select></td></tr>
            <tr><td>5</td><td>Шкода</td><td>лифтбэк</td><td value="2016-05-01">2016-05-01</td><td>99</td><td><select><option value="Open">Open</option><option value="In progress">In progress</option><option selected value="Resolved">Resolved</option></select></td></tr>
        </tbody>
    </table>
    <script>
        function search(searchWord) { //создание функции
            var idx = 0;
            for (var i = 1, l = tbl.rows.length; i < l; i++) { //перебор столбцов по длине
                tbl.rows[i].style.backgroundColor = 'white';
                for (var j = 0, l1 = tbl.rows[i].cells.length; j < l1; j++) { //перебор ячеек
                    if (tbl.rows[i].cells[j].innerHTML.indexOf(searchWord) + 1) { //если длина и ячейки совпадают, то перемещаем строку на первую позицию
                        idx++;
                        var clone = tbl.rows[i].cloneNode(true);
                        tbl.rows[i].parentNode.removeChild(tbl.rows[i]);
                        clone.style.backgroundColor = 'paleturquoise'; //изменяем первой/найденной ячейки
                        tbl.rows[1].parentNode.insertBefore(clone, tbl.rows[idx]);
                    }
                }
            }

        }

        btn.onclick = function () { //присваиваем кнопке функцию
            search(srch.value)
        }
    </script>


Цитата:

П.С. Так же как и у Рони, при поиске "2" он ищет все элементы в таблице содержащие двойку
Это вы сами задали такое условие совпадения для ячеек. Не мы же его придумали.

santey12 08.03.2016 19:56

destus, согласен, потому что у меня не получилось отсортировать, как я писал ранее я пытался с помощью RegExp, но не вышло. Вот так лучше. Можете закомментировать?
function search(searchWord) { //создание функции
            var idx = 0; 
            for (var i = 1, l = tbl.rows.length; i < l; i++) { //перебор столбцов по длине
                tbl.rows[i].style.backgroundColor = 'white';
                for (var j = 0, l1 = tbl.rows[i].cells.length; j < l1; j++) { //перебор ячеек
                    if (tbl.rows[i].cells[j].innerHTML.indexOf(searchWord) + 1) { //если длина и ячейки совпадают, то перемещаем строку на первую позицию
                        idx++;
                        var clone = tbl.rows[i].cloneNode(true);
                        tbl.rows[i].parentNode.removeChild(tbl.rows[i]);
                        clone.style.backgroundColor = 'paleturquoise'; //изменяем первой/найденной ячейки
                        tbl.rows[1].parentNode.insertBefore(clone, tbl.rows[idx]);
                    }
                }
            }

        }

        btn.onclick = function () { //присваиваем кнопке функцию
            search(srch.value)
        }

santey12 08.03.2016 20:00

Вообще основная проблема была не с подсветкой найденных строк, а как раз с тем, что при поиске у меня не получалось найти конкретное число и не получалось реализовать поиск по <select>:D

destus 08.03.2016 20:07

function search(searchWord) { //создание функции
            var idx = 0; //индекс (указывает место куда вставлять очередное совпадение)
            for (var i = 1, l = tbl.rows.length; i < l; i++) { //перебор столбцов по длине
                tbl.rows[i].style.backgroundColor = 'white'; //всем строкам белый цвет
                for (var j = 0, l1 = tbl.rows[i].cells.length; j < l1; j++) { //перебор ячеек
                    if (tbl.rows[i].cells[j].innerHTML.indexOf(searchWord) + 1) { //если длина и ячейки совпадают, то перемещаем строку после idx
                        idx++; 
                        var clone = tbl.rows[i].cloneNode(true);
                        tbl.rows[i].parentNode.removeChild(tbl.rows[i]);
                        clone.style.backgroundColor = 'paleturquoise'; //найденной строке цвет paleturquoise
                        tbl.rows[1].parentNode.insertBefore(clone, tbl.rows[idx]); //чтобы найденные строки шли в той же последовательности, что и в изначальной таблице
                    }
                }
            }

        }


Часовой пояс GMT +3, время: 04:00.