2013-09-11 3 views
0

Я пытаюсь использовать RegExp в Javascript (в частности, функцию match), чтобы найти появление предложения и слово внутри этого предложения в теле HTML. Ниже некоторые псевдо-код у меня есть:match() в body возвращает нечетный результат

<!DOCTYPE html> 
<html> 
<body id="hello"> 

<p id="demo">Click the button to display the matches.</p> 

<div> <input type="button" value="search" onclick="myFunction('<p id=&quot;demo&quot;>Click the button to display the matches', 'button')" />Try it </div> 

<script> 
function myFunction(sentence, word) 
{ 
//var str="The rain in SPAIN stays mainly in the plain"; 
//var toMatch = "The rain in SPAIN stays mainly in the plain"; 
var r = new RegExp(word, 'g'); 
var oldHTML = document.getElementById("hello").innerHTML; 
var n=oldHTML.match(r); 
alert("no. of matches = " + n.length); 
document.getElementById("demo").innerHTML=n; 
} 
</script> 

</body> 
</html> 

В вышеприведенном HTML, есть только одно вхождение фразы и одно слово «кнопка», но число запросов = 4 и n = button,button,button,button.

Мои вопросы:
1. Почему этот RegExp приводит к 4 поисковым запросам?
2. Как я могу найти раздел HTML body, так что ответ, который я получаю, верен?

+3

# 1 '

Нажмите button', # 2' <тип = "кнопка" ввод ',' # 3 Quot;> Нажмите button', # 4 ' 'кнопки',) ' – Andreas

+0

вы правильно получив ответ как 4. Есть 4 вхождения кнопки слова. 1.> Нажмите кнопку 2. Введите тип = "кнопка" 3. Нажмите кнопку 4., 'button') – SHANK

+0

@Andreas: достал. Если бы я искал предложение вместо этого, я получаю одно совпадение. Как я могу получить начальный индекс матча? – Sriram

ответ

0
  1. Как уже было сказано, вы получаете 4 события, поскольку вы просматриваете всю разметку html, а не только видимый пользователем текст.
  2. Используйте innerText, а не innerHTML, чтобы получить лучшие результаты.
+0

Есть ли какая-либо функция в Javascript, которая бы разрешить мне искать только видимый пользователем текст? Свойство innerText, примененное к тегу body, позволит мне это сделать? – Sriram

+0

Более или менее: да. Используйте innerText, чтобы получить текст данного элемента. – WTK

0

Вы можете использовать текстовую функцию jQuery для получения текста вашего элемента body и поиска из него.

e.g 
bodyElement = $("body"); 
bodyText = bodyElement.text(); 
Смежные вопросы