2009-12-30 31 views
5

Nó có thể là một cái gì đó thực sự đơn giản, nhưng tôi chỉ đang học.Tìm kiếm Javascript cho thẻ và nhận nó bên trongHTML

Có một trang có 3 thẻ blockquote trên đó và tôi cần phải nhận được innerHTML của một thẻ có chứa một chuỗi nhất định. Tôi không biết cách tìm kiếm/khớp một chuỗi và nhận được innerHTML của thẻ chứa kết quả phù hợp.

Mọi trợ giúp sẽ được đánh giá cao!

Trả lời

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; 
    } 
} 

:)

Btw sẽ có nhiều Phương pháp đẹp hơn nếu bạn muốn được sử dụng Prorotype JS (mà là tốt hơn nhiều so với jQuery btw):

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

Bạn có thể dĩ nhiên cũng sử dụng biểu thức thông thường để tìm chuỗi, mà có thể có ích hơn (sử dụng el.match () cho điều đó).

+0

Điều này sẽ chỉ khớp với phần tử innerHTML là chính xác như searchString, và đó không phải là những gì anh ta muốn (tại sao bạn sẽ tìm kiếm nó sau đó, nếu bạn đã có chuỗi)? –

+0

Rất tiếc, có vẻ như tôi đã thất bại: D. Sẽ sửa nó. – watain

+0

Bạn chỉ trả về true/false trong ví dụ cuối :) –

2

Gán một id đến các yếu tố blockquote sau đó bạn có thể nhận được innerHTML như thế này:

HTML:

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

JS:

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

Đây không phải trang của tôi, tôi không thể chỉ định ID, nhưng cảm ơn bạn đã trả lời dù sao! :) –

5

Nếu bạn cần phải tìm kiếm thông qua tất cả các <blockquote> trên trang, hãy thử này:

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

Vì một lý do nào đó tôi không thể làm việc này (ngay cả sau khi thay thế lần cuối)} –

2

Hãy cẩn thận sử dụng innerHTML để tìm kiếm văn bản trong một thẻ, vì điều đó cũng có thể tìm kiếm văn bản trong các thuộc tính hoặc thẻ như tốt.

Bạn có thể tìm thấy tất cả yếu tố sử dụng:

var elems = document.getElementsByTagName("blockquote") 

Sau đó bạn có thể xem qua innerHTML của họ, nhưng tôi muốn giới thiệu thay vì nhìn qua họ textContent/innerText (buồn thay, đây không phải là tiêu chuẩn hóa trên trình duyệt, có vẻ như):

for (i in elems) { 
    var text = elems[i].textContent || elems[i].innerText; 
    if (text.match(/foo/)) { 
    alert(elems[i].innerHTML); 
    } 
} 
Các vấn đề liên quan