2013-07-04 33 views
5

Tôi có HTML với một số thẻ tùy chỉnh. Tôi muốn tìm tất cả trừ hai ('bắt đầu', 'kết thúc') và bỏ chúng ra. jQuery.find() dường như chỉ tìm thấy các thẻ tùy chỉnh này khi tôi tìm kiếm những gì trong tài liệu, chứ không phải khi tôi tìm kiếm một đối tượng jQuery. Tôi đang làm gì sai?jQuery sẽ không tìm thấy thẻ tùy chỉnh

có nên tự giải thích trong fiddle:

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

Đây là một phần javascript:

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) 

và một ví dụ về HTML:

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

mà nên là:

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

Cảm ơn

+4

html với các thẻ tùy chỉnh không còn html –

+1

với ngoại lệ của

+2

Tại sao viết HTML theo cách này? Các lợi ích nào gắn thẻ '' có hơn '

' hoặc ''? Chưa kể, sử dụng bộ chọn '$ ('. ClassName')' nhanh hơn '. – Dom

Trả lời

3

Vấn đề của bạn nằm với các biến ban đầu của bạn:

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

này dịch để var html = $($('pre').html()), mà sẽ không phù hợp với bất kỳ yếu tố. Lý do được rằng, kể từ khi chọn không bắt đầu bằng một # hoặc ., nó được tìm nghĩa đen tìm kiếm các từ khóa:

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

vv ...

Đây là một bản demo những gì tôi có nghĩa là: http://jsfiddle.net/hpNN3/7/


Đơn giản chỉ cần làm như sau:

var html = $('pre'); 

DEMO: http://jsfiddle.net/hpNN3/6/

+0

ok - nhưng điều này chỉ unwraps họ nếu họ đang ở trong DOM. Tôi không muốn thao tác trực tiếp DOM - tôi muốn tạo một đối tượng (không gắn với tài liệu) và thực hiện phép biến đổi của tôi ở đó. –

Các vấn đề liên quan