Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   поиск на странице (https://javascript.ru/forum/jquery/47521-poisk-na-stranice.html)

sergeo_89 27.05.2014 12:12

поиск на странице
 
решил попробовать написать код поиска символов на странице самостоятельно, но хватило меня только на это
<form  id="search" method="POST" action="" name="searchform">
	<input id="ButtonSearch" type="submit" value="Найти">
	<input id="textSearch" type="text" name="search" value="Поиск..">
	</form>

var searchText = $('#textSearch').val();

$('#search').submit(function(){
	if(searchText == 'Поиск..' || searchText == ''){
alert('Вы не заполнили поле ввода');
		return false;
		
	}
	else{
		globalSearch.call(searchText);
	}
})

function globalSearch(myString){
	var allElements = $('*');
	var resultSearch;
	
	for (var i = 0; i < allElements.length; i++) {
		if(allElements.text() == myString){
			resultSearch = myString;
			$('.block_C').prepend('<p>' + resultSearch + '</p>');
		}
	};
}
Подскажите что не так, вроде логику соблюдал...

рони 27.05.2014 12:20

почему 1 строка не в 3 скрипта?

рони 27.05.2014 12:34

sergeo_89,
:-?
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
  	$(function ()
  	  {
  	    $('#search').submit(function()
  	      {
  	        var searchText = $('#textSearch').val();
  	        if(searchText == 'Поиск..' || searchText == '') {
  	          alert('Вы не заполнили поле ввода');
  	        }
  	        else {
  	          globalSearch(searchText);
  	        }
  	        return false;
  	      }
  	    )
  	    function globalSearch(myString) {
  	      var allElements = $('*').not('.block_C');
  	      for (var i = 0; i < allElements.length; i++) {
  	        if($(allElements[i]).text() == myString) {
  	          $('.block_C').prepend('<p>' + myString + '</p>');
  	        }
  	      };
  	    }
  	  }
  	)
  </script>
</head>

<body>
  <p>test</p>
  <div class="block_C"></div>
<form  id="search" method="POST" action="" name="searchform">
	<input id="ButtonSearch" type="submit" value="Найти">
	<input id="textSearch" type="text" name="search" value="Поиск..">
	</form>

</body>

</html>

sergeo_89 27.05.2014 12:55

О Спасибо вам за помощь!) радует, что был близок)

рони 27.05.2014 12:58

sergeo_89,
for неправильно использовать в jquery для это есть each

sergeo_89 27.05.2014 13:07

получается на jquery будет выглядеть так
function globalSearch(myString){
 	var allElements = $('*').not('.block_C');
 	allElements.each(function(){
 		if($(this).text() == myString) {
 		   	$('.block_C').prepend('<p>' + myString + '</p>');
 		}
 	})
 }
)))

рони 27.05.2014 13:17

sergeo_89,
да

krasovsky 28.05.2014 07:47

Цитата:

Сообщение от рони (Сообщение 313647)
sergeo_89,
for неправильно использовать в jquery для это есть each

Отчего же? Я думаю что нативные средства можно и нужно применять максимально, кроме случаев когда это явно вредит,или усложняет/значительно увеличивает код.

sergeo_89 28.05.2014 09:08

и снова тупик, конструкцией
$('*:not(.block_C)')
Я выбираю все элементы Тэги, Как же мне выбрать содержимое этих тэгов?! и плюс почему то не срабатывает код
$(function(){
  $('#search').submit(function(){
    var searchValue = $('#textSearch').val();
    var searchText = $('#textSearch').text();
    if(searchValue == '' || searchValue == 'Поиск..') {
      alert('Вы не заполнили поле ввода');
    }
    else {
      globalSearch(searchText);
    }
      return false;
    })

function globalSearch(myString){
  var regV = /\w\s\d[A-Za-z0-9-]+/g;
  var result = myString.search(regV);
  var allElements = ($('*:not(.block_C)'));
  allElements.each(function(){
    if($(this).text() == myString && result == -1) {
      $(this).css('background','#F9FF82');
      $('.block_C').prepend('<p>Результаты поиска:<br><br><span>' + myString + '</span><br><br></p>').addClass('searchResult');
        }
        else{
          globalSearchRemove(myString);
        }
      })
}

function globalSearchRemove(myResults){
    $('block_C p').fadeOut(300);
}

})

<form  id="search" method="POST" action="" name="searchform">
	<input id="ButtonSearch" type="submit" value="Найти">
	<input id="textSearch" type="text" name="search" value="Поиск..">
	</form>

подскажите где тут прокол

рони 28.05.2014 11:52

Цитата:

Сообщение от sergeo_89
почему то не срабатывает код

4 строка зачем?
Цитата:

Сообщение от sergeo_89
Как же мне выбрать содержимое этих тэгов?!

.html()

рони 28.05.2014 12:00

sergeo_89,
начиная со строки 23 и до конца скрипта идёт нелогичная конструция и ошибка в селекторе строка 30

рони 28.05.2014 12:10

sergeo_89,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .searchResult{
    background: Aqua
  }

  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
  	$(function(){
  $('#search').submit(function(){
    var searchValue = $('#textSearch').val();
    if(searchValue == '' || searchValue == 'Поиск..') {
      alert('Вы не заполнили поле ввода');
    }
    else {
      globalSearch(searchValue);
    }
      return false;
    })

function globalSearch(myString){
  var regV = /\w\s\d[A-Za-z0-9-]+/g;
  var result = myString.search(regV);
  var allElements = $('*:not(".block_C, .block_C *")');
  allElements.each(function(){
    if($(this).text() == myString && result == -1) {
      $(this).css('background','#F9FF82');
      $('.block_C').prepend('<p>Результаты поиска:<br><br><span>' + myString + '</span><br><br></p>').addClass('searchResult');
        }
        else{
         // globalSearchRemove(myString);
        }
      })
}

function globalSearchRemove(myResults){
    $('.block_C p').fadeOut(300);
}

})

  </script>
</head>

<body>
  <p>test</p><p>notest</p>
  <div class="block_C"></div>
<form  id="search" method="POST" action="" name="searchform">
	<input id="ButtonSearch" type="submit" value="Найти">
	<input id="textSearch" type="text" name="search" value="Поиск..">
	</form>

</body>

</html>

sergeo_89 28.05.2014 12:42

Спасибо большое за поправку.
Цитата:

Сообщение от рони (Сообщение 313785)
sergeo_89,
начиная со строки 23 и до конца скрипта идёт нелогичная конструция и ошибка в селекторе строка 30

Здесь Я хотел как то привязать функцию, чтоб при вводе пользователем другого значения, старые результаты поиска удалялись.

а так у меня проблемма в том, что основной текст находится в блоке Д, который надо искать, и он не работает, там английский текст, что нужно дописать, Чтоб мои задачи были реализованы? а вообще наверно мне стоит сначала javaScript изучить... раз в таких простейших местах делаю ошибки...

рони 28.05.2014 12:53

Цитата:

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

так стирайте сразу в строке 28 добавьте $('.block_C').html('') или $( '.block_C' ).empty();
Цитата:

Сообщение от sergeo_89
а так у меня проблемма в том, что основной текст находится в блоке Д, который надо искать, и он не работает, там английский текст, что нужно дописать, Чтоб мои задачи были реализованы?

моя твоя непонимать - твоя макет делать обьяснять
может готовое тут взять http://javascript.ru/forum/project/4...-v-tekste.html

sergeo_89 28.05.2014 14:46

а все спасибо разобрался, вставил в событие submit
$('.block_C').html('');
и все заработало. осталось только разобраться почему ищет только одно слово (Главная). В готовом варианте слишком все сложно, да и самому лучше сделать, чтоб понять, Спасибо еще раз

sergeo_89 28.05.2014 17:00

вот перевел проект в песочницу, посмотри пожалуйста, когда ввожу слово "Главная" все работает, когда "Lorem" нет. http://learn.javascript.ru/play/KQlDfc
и плюс не знаю как бы убрать background, если пользователь ввел другое значение в форму поиска

рони 28.05.2014 17:16

sergeo_89,
так вы хотите часть текста -- так делайте test или search а не ==
Цитата:

Сообщение от sergeo_89
не знаю как бы убрать background

ставьте класс и удаляйте класс


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