2009-04-01 22 views
5

Web sayfasındaki bir öğeden öğe koleksiyonu almak için getElementsByTagName() işlevini kullanabilirim.Javascript dizesi değişkenleri için getElementsByTagName() gibi bir işlevi var mı?

Bir DOM öğesinin içeriği yerine bir javascript dizesi değişkeninin içeriğinde benzer bir işlevi kullanabilmek istiyorum.

Bunu nasıl yaparım?

DÜZENLEME

ben anında unsurunu oluşturarak yapabilirsiniz.

var myElement = new Element('div'); 
myElement.innerHTML = "<strong>hello</strong><em>there</em><strong>hot stuff</strong>"; 
var emCollection = myElement.getElementsByTagName('em'); 
alert(emCollection.length); // This gives 1 

Ama sadece doğru görünmüyor ve Internet Explorer öğelerle çalışmıyor getElementsByTagName() işlevini kullanarak rahatlığı için anında bir eleman yaratılmaktadır.

+0

Yani, bir dizede metin mi aramak istiyorsunuz? – strager

+0

Evet. Alternatif bir işlev varsa, normalde bir regex ormanı oluşturmak istemiyorum. – adolfojp

cevap

-1

Dizgiye HTML özel bir şey değildir. Sadece bir dizgede metin var. Faydalı olması için bir ağaca ayrıştırılması gerekiyor. Bu nedenle, bir öğeyi oluşturmanız, ardından örneğinizde gösterildiği gibi, getElementsByTagName numaralı telefonu aramanız gerekir.

3
function countTags(html, tagName) { 
    var matches = html.match(new RegExp("<" + tagName + "[\\s>]", "ig")); 
    return matches ? matches.length : 0; 
} 

alert(
    countTags(
     "<strong>hello</strong><em>there</em><strong>hot stuff</strong>", 
     "em" 
    ) 
); // 1 
4

Dizeyi DOM’a enjekte ettiğiniz gibi, bunu yapmanın en kolay ve en güvenilir yoludur. Bir dize üzerinde çalışırsanız, 'un görüntüsünde gibi bir etiket gibi görünebilecek tüm olası kaçış senaryolarını hesaba katmanız gerekecek bir etiket.

Örneğin, İşaretlemenize

<button value="<em>"/> 
<button value="</em>"/> 

olabilir - Eğer bir dize olarak davranın, sen orada bir <em> etiketine sahip düşünebilirsiniz, ama gerçekte, sadece iki düğme etiketlerine sahip .

DOM'a innerHTML aracılığıyla enjekte ederek, tarayıcının yerleşik HTML ayrıştırıcısından yararlanırsınız, bu da oldukça hızlıdır. Aynısını düzenli ifade ile yapmak bir acı olur ve tarayıcılar genellikle dizeler içindeki öğeleri bulmak için DOM benzeri işlevler sağlamamaktadır.

Deneyebileceğiniz başka bir şey, dizeyi XML olarak ayrıştırmak olurdu, ancak bunun DOM enjeksiyon yönteminden daha zahmetli ve yavaş olacağından şüpheleniyorum.

0
var domParser = new DOMParser(); 
var htmlString = "<strong>hello</strong><em>there</em><strong>hot stuff</strong>"; 
var docElement = domParser.parseFromString(htmlString, "text/html").documentElement; 
var emCollection = docElement.getElementsByTagName("em"); 
for (var i = 0; i < emCollection.length; i++) { 
    console.log(emCollection[i]); 
} 
İlgili konular