2017-11-17 89 views
8
Ben vurgulamak için filtre kümesi yazmaya çalışıyorum

ve sonra dinamik olarak oluşturulmuş dehighlight html:Açısal vurgulamak & dehighlight dinamik html kullanarak filtreler

Vurgu filtresi:

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

Yayılma etiketini çıkarmaya ve orijinal metni bırakmaya çalışıyorum, ancak çalışıp çalışmadığını veya geri dönüp dönmeyeceğinden emin değilim. Str, html dizesidir. Herhangi bir yardım büyük takdir edilecektir!

+0

bu Angular2 ya da geç olduğundan emin misin? –

+0

@Gunter Açısal 1.6 – RandomUs1r

+1

'angularjs' AngularJS 1.x için doğru etiket. 'Açısal' etiketi sadece Angular 2+ içindir. Doğru etiketleri kullanmak iyi bir cevap almak için şansı arttırır. –

cevap

2

Sadece bütünlük uğruna, sonuçta anladım, bulma işlevi POV'umdan hatalı davranıyordu. dehighlighting için

Final çözüm:

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

Angular ile önemsiz bir görev olarak işaretleme terimlerini bulduk ve bir dış kütüphane (Mark.js) kullanarak sona erdirdik. Html'yi doğrudan bunun gibi manipüle etmek, açının kapsamını bozabilir ve başka sorunlar yaratabilir. Her bir olası terim kendi küçük html etiketinde bulunuyorsa, paylaşılan bir terimler listesine (bir hizmetin içine veya hizmetinin bir parçası olarak) karşı test etmek için her birinde bir filtre kullanabilirsiniz, yalnızca "filtrenin" düzgün olduğunu unutmayın. Girdileri değiştirmenin ne olacağı hakkında bir kirli kontrol ve yeniden değerlendirmek.

+0

İlginç, bu işe yarayacak gibi görünüyor, ama benim yolumu yapmam gerekiyor çünkü ben daha sonra bulunan eşleştirmelerin bağlantılarını/çözümlerini yapmak için filtreleri yeniden kullanacağım. Yani, kütüphanenin soyutladığı enjekte ettiğim şeyi/şeridi kontrol etmem gerekiyor. – RandomUs1r

+0

Daha sonra bir transkripsiyon kullanarak daha fazla şansınız olabilir. Oldukça zor, ama çok daha doğrudan html manipülasyonuna izin veriyorlar. – nclu

İlgili konular