2013-07-04 20 views
5

Çeşitli özel etiketlere sahip HTML'im var. Hepsini iki ('başlangıç', 'son') bulmak ve onları açmak istiyorum. jQuery.find(), jQuery nesnesini aradığımda değil, belgede ne aradığımı bulduğumda bu özel etiketleri buluyor gibi görünüyor. Neyi yanlış yapıyorum?jQuery, özel etiketler bulamazsınız

var raw = $('pre').html(); 
var html = $(raw); 
var starts = html.find('start'); 
var spans = html.find('span'); 

//this returns nothing 
console.log(starts) 
// works - can find in object 
console.log(spans) 
//this works 
console.log($('start')); 


//only picks up spans, not annotations 
// I want this to return the innerHTML of the pre, stripping all tags except for 'start' and 'end' -- but retain the contents of those tags. 
var cleaned = html.find(':not(start, end)').each(function() { 
    $(this).contents().unwrap(); 
}); 

console.log(cleaned); 

$('#clean').html(cleaned) 

ve HTML örneği:

http://jsfiddle.net/hpNN3/2/

İşte javascript parçası:

kendinden açıklamalı keman içinde olmalı

<span class="ng-scope">CTAGCTCTCTGGAGATTAACGAGGAGAAATACTAGAtTGGTTCAT</span> 
<start feat="1" class="ng-scope"></start> 
<annotation index="1" class="ng-isolate-scope ng-scope" style="background-color: rgb(238, 153, 238); background-position: initial initial; background-repeat: initial initial;"> 
    <span tooltip="Another Promoter" tooltip-placement="mouse" tooltip-append-to-body="true" ng-transclude="" class="ng-scope"> 
     <span class="ng-scope">GATCATAAgcttgaat</span> 
    </span> 
</annotation> 
<end feat="1" class="ng-scope"></end> 
<span class="ng-scope">tagccaaacttatt</span> 

hangi should be:

012 Senin sorunun İlk değişkenlerle yatıyor

CTAGCTCTCTGGAGATTAACGAGGAGAAATACTAGAtTGGTTCAT<start feat="1" class="ng-scope"></start>GATCATAAgcttgaat<end feat="1" class="ng-scope"></end>tagccaaacttatt

Teşekkür

+4

html

+1

olduğunu. ne olursa olsun, DOM'ı dağıtmazlar ve en azından Chrome, Firefox, Safari'de doğru şekilde yorumlanırlar ve bu benim sorduğum şey değil. JQuery'nin özel öğeleri almaması biliniyorsa, bu yararlı bir yanıt olacaktır. Ancak kemanda gösterildiği gibi, en azından belgede olduğunda, bir nesnede gerekli olmadığında, özel etiketler alabilir. –

+2

Neden HTML bu şekilde yazılır? 'etiketi

' veya '' işlevine sahiptir? Bahsetmemek gerekirse, '$ ('. ClassName ') 'seçicisini kullanmak daha hızlıdır. – Dom

cevap

3

: Herhangi elemanı maç olmayacak

var raw = $('pre').html(); 
var html = $(raw); 

Bu var html = $($('pre').html()) çevirir. İşte

bir demo ...

<<start feat="11" class="ng-scope"></start><annotation index="11" class="ng-isolate-scope ng-scope" style="background-color: rgb(238, 204, 153); background-position: initial initial; background-repeat: initial initial;">> 

vb: nedeni seçici bir # veya . öncesinde olmadığı için, bu etiketine bakılarak anlamıyla bakıyor, o varlık ait ne demek: http://jsfiddle.net/hpNN3/7/


Basitçe aşağıdakileri yapın:

var html = $('pre'); 

DEMO: özel etiketleri ile http://jsfiddle.net/hpNN3/6/

+0

tamam - ama bu yalnızca DOM içinde olduklarında onları açıyor. DOM'ı doğrudan değiştirmek istemiyorum - Bir nesneyi (belgeye bağlı değil) yapmak ve dönüşümümü orada yapmak istiyorum. –