2017-11-17 21 views
8

Tôi đang cố gắng để viết một tập hợp các bộ lọc để làm nổi bật và html sau đó tự động dehighlight tạo:nổi bật & html động dehighlight sử dụng bộ lọc kiễu góc

lọc Highlight:

app.filter('highlight', function ($sce) { 
    return function (str, termsToHighlight) { 
     // Sort terms by length 
     termsToHighlight.sort(function (a, b) { 
      return b.length - a.length; 
     }); 
     var regex = new RegExp('(' + termsToHighlight.join('|') + ')', 'g'); 
     return $sce.trustAsHtml(str.toString().replace(regex, '<span class="highlightedSpan" style="background-color: yellow; ' + 
      'font-weight: bold;">$&</span>')); 
    }; 
}); 

Dehighlight:

app.filter('dehighlight', function ($sce) { 
    return function (str) { 

     var obj = $($.parseHTML(str)); 

     obj = obj.find('.highlightedSpan').replaceWith(function() { return this.innerHTML; }); 

     return $sce.trustAsHtml(obj.html()); 
    }; 
}); 

Tôi đang cố gắng loại bỏ thẻ span và để nguyên văn bản gốc, nhưng tôi không chắc liệu nó có hoạt động hay không. Str là chuỗi html. Mọi sự trợ giúp sẽ rất được trân trọng!

+0

Bạn có chắc chắn đây là Angular2 hay muộn? –

+0

@Gunter Angular 1.6 – RandomUs1r

+1

'angularjs' là thẻ chính xác cho AngularJS 1.x. Thẻ 'angular' chỉ dành cho Angular 2+. Sử dụng đúng thẻ sẽ tăng cơ hội nhận được câu trả lời hay. –

Trả lời

2

Chỉ vì mục đích đầy đủ, cuối cùng tôi đã nhận được chức năng tìm thấy không đúng với POV của tôi.

giải pháp cuối cùng cho dehighlighting:

app.filter('dehighlight', function() { 
    return function (str) { 
     var obj = $('<div/>').append(str); 

     obj.find('span.highlightedSpan').replaceWith(function() { return this.innerHTML; }); 

     return obj.html().toString(); 
    }; 
}); 
3

Chúng tôi đã tìm thấy các cụm từ đánh dấu bằng Angular là một nhiệm vụ không tầm thường và kết thúc bằng cách sử dụng thư viện bên ngoài (Mark.js). Thao tác các html trực tiếp như thế có thể phá vỡ phạm vi của góc cạnh và tạo ra các vấn đề khác. Nếu mỗi cụm từ có thể nằm trong thẻ html của riêng nó, thì bạn có thể sử dụng bộ lọc trên mỗi thẻ để kiểm tra danh sách các cụm từ được chia sẻ (hoặc được chuyển vào hoặc là một phần của dịch vụ), chỉ cần nhớ rằng "bộ lọc" về những gì thay đổi đầu vào sẽ cháy một kiểm tra bẩn và đánh giá lại.

+0

Thú vị, điều này có vẻ như nó sẽ làm việc, nhưng tôi cần phải làm theo cách của tôi bởi vì tôi sẽ tái sử dụng các bộ lọc để làm liên kết/delinking của các trận đấu được tìm thấy sau này. Cụ thể là tôi cần phải kiểm soát những gì tôi tiêm/dải, mà thư viện tóm tắt. – RandomUs1r

+0

Bạn có thể có nhiều may mắn hơn bằng cách sử dụng một chỉ thị với quá trình chuyển đổi. Chúng khá phức tạp, nhưng cho phép thao tác html trực tiếp hơn rất nhiều. – nclu

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