Greasemonkey: ищите строку между двумя элементами

Я пишу сценарий Greasemonkey, который должен сделать простую вещь: если между <h2> элемент (всегда только один на странице) и первое вхождение <h3> элемент (может быть несколько или их вообще нет), затем... (я уже сделал эту часть).

Я был бы благодарен за некоторую помощь с условным условием.

4 ответа

Решение

Теперь я просто знаком с кодами, над которыми работает Михаил.

Основная структура

<div>
<div>
<h2>Something</h2>
<td>We want to search for the string here</td>
<td>We want to search for the string here</td>
</div>

<div>
<h3>Something else</h3>
<td>May contain the same string, but we are only interested if it contains in previous div .</td>
<td>May contain the same string, but we are only interested if it contains in previous div .</td>
</div>
</div>

Строка не является дочерней по отношению к h2, поэтому я не думаю, что getElementsByTagName будет работать. К сожалению, есть буквально сотни слоев div с одинаковым идентификатором класса. В данном конкретном случае заголовок является единственной уникальной информацией в коде. Так что, на мой взгляд, лучший способ - сначала найти h2, перейти к его родителю и сохранить текст в виде строки. Затем найдите строку в тексте. Что-то вроде этого...

<script>
var searcharea = jQuery('h2').parent('div').text();
var searchstring = "superstring";
if( searcharea.indexOf( searchstring ) != -1 )
    alert("exchange alert to your own things");
</script>

Что касается h3, он может существовать или не существовать, но, поскольку он не брат, это не имеет значения.:) Спасибо всем, что нашли время ответить на наш вопрос.

var masterString = document.body.innerHTML;
var start = masterString.indexOf('<h2>'); 
var end = masterString.indexOf('<h3>'); // Will find the position of first occurance of h3 - if any

if (end <0)
// there is no h3
else {
  var searchMe = masterString.substr(start,end);  // now this is the portion of your HTML body that you want to look for a string match
  var numberOfOccurances = searchMe.match(/yourString/g);
}

Ты пытался getElementsByTagName?

//get all the H2 elements
var h2 = document.getElementsByTagName("h2");

//Just in case there are more than one...
for(var i = 0; i < h2.length; i++){
 //check for the certain string
 if(h2[i].textContent == "SOME TEXT"){
  //get the first h3 element and do something...
  var h3 = document.getElementsBtTagName("h3")[0]; //first occurrence of H3
  //DO SOMETHING
}

https://developer.mozilla.org/en-US/docs/DOM/Node.textContent

https://developer.mozilla.org/en-US/docs/DOM/element.getElementsByTagName

Другие вопросы по тегам