2009-12-30 6 views
5

Это, наверное, что-то действительно простое, но я просто изучаю.Javascript ищет метку и получаю ее innerHTML

На нем есть страница с 3 тегами blockquote, и мне нужно будет получить innerHTML того, который содержит определенную строку. Я не знаю, как искать/сопоставлять строку и получать innerHTML тега, содержащего согласованный результат.

Любая помощь будет оценена!

ответ

7
var searchString = 'The stuff in innerHTML'; 
var elements = document.getElementsByTagName('blockquote') 
for (var i = 0; i < elements.length; i++) { 
    if (elements[i].innerHTML.indexOf(searchString) !== -1) { 
     alert('Match'); 
     break; 
    } 
} 

:)

Кстати, было бы много лучше метод, если вы хотите использовать Prorotype JS (что гораздо лучше, чем JQuery кстати):

var el = $$('blockquote').find(function(el) { 
    return el.innerHTML.indexOf('The string you are looking for.') !== -1; 
}); 

Конечно, вы можете также использовать регулярные выражения, чтобы найти строку, которая может быть более полезным (используйте el.match () для этого).

+0

Это будет соответствовать только элементу, который является innerHTML точно так же, как searchString, и это не то, что он хочет (почему бы вам его искать, если у вас уже есть строка)? –

+0

Увы, похоже, я потерпел неудачу: D. Поправим. – watain

+0

В последнем примере вы просто возвращаете true/false :) –

2

Назначить идентификатор для BLOCKQUOTE элементов, то вы можете получить innerHTML, как это:

HTML:

<blockquote id="bq1">Foo</blockquote> 

JS:

var quote1 = document.getElementById('bq1').innerHTML; 
+1

Это не моя страница, я не могу назначить идентификатор, но спасибо за ответ в любом случае! :) –

5

Если вам нужно искать через каждый <blockquote> на странице, попробуйте следующее:

function findBlockquoteContainingHtml(matchString) { 
    var blockquoteElements = document.getElementsByTagName('BLOCKQUOTE'); 
    var i; 
    for (i = 0; i < blockquoteElements.length; i++) { 
     if (blockquoteElements[i].innerHTML.indexOf(matchString) >= 0) { 
      return blockquoteElements[i].innerHTML; 
     } 
    } 
    return null; 
} 
+0

По какой-то причине я не мог заставить это работать (даже после замены последнего) –

2

Будьте осторожны при использовании innerHTML для поиска текста внутри тега, так как это может также выполнять поиск текста в атрибутах или тегов, как Что ж.

Вы можете найти все элементы с помощью:

var elems = document.getElementsByTagName("blockquote") 

Вы можете просматривать их innerHTML, но я бы рекомендовал вместо просматривал их textContent/innerText (к сожалению, это не нормируется через браузер, кажется,):

for (i in elems) { 
    var text = elems[i].textContent || elems[i].innerText; 
    if (text.match(/foo/)) { 
    alert(elems[i].innerHTML); 
    } 
}