5 Stimmen

AngularJS: Ist es möglich, in derselben Direktive eine Säuberung und Verlinkung durchzuführen?

Wenn ich versuche, einen Ausschnitt mit linky zu filtern, wird die Eingabe nicht mehr desinfiziert / gerendert / "HTML-isiert". d.h. Ich möchte die Effekte beider kombinieren können:

und

Hier ist der Fiddle: http://jsfiddle.net/5uSnj/

1voto

Igor Minar Punkte 9574

Linky nimmt Text als Eingabe und nicht html. Wenn Sie einen Filter möchten, der html als Eingabe akzeptiert, muss er komplett anders funktionieren. Bitte siehe: https://github.com/angular/angular.js/pull/3285#issuecomment-21958391

0voto

zloctb Punkte 9390

Entschuldigung, Igor Minar, ich habe deine Antwort gewählt, aber ich möchte den Beitrag deiner Funktion ohne andere Dienste sehen:

    app.filter('htmlLinky', function($sanitize, linkyFilter) {
  var ELEMENT_NODE = 1;
  var TEXT_NODE = 3;
  var linkifiedDOM = document.createElement('div');
  var inputDOM = document.createElement('div');

  var linkify = function linkify(startNode) {
    var i, ii, currentNode;

    for (i = 0, ii = startNode.childNodes.length; i < ii; i++) {
      currentNode = startNode.childNodes[i];

      switch (currentNode.nodeType) {
        case ELEMENT_NODE:
          linkify(currentNode);
          break;
        case TEXT_NODE:
          linkifiedDOM.innerHTML = linkyFilter(currentNode.textContent);
          i += linkifiedDOM.childNodes.length - 1
          while(linkifiedDOM.childNodes.length) {
            startNode.insertBefore(linkifiedDOM.childNodes[0], currentNode);
          }
          startNode.removeChild(currentNode);
      }
    }

    return startNode;
  };

  return function(input) {
    inputDOM.innerHTML = input;
    return linkify(inputDOM).innerHTML;
  };
});

ng-bind-html="html | htmlLinky"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X