AngularJS中DOM的后处理

AngularJS中DOM的后处理,angularjs,Angularjs,我想将target=“\u blank”添加到经过linky过滤器的HTML片段中。也就是说,我需要在内容完全呈现后对DOM进行后期处理 看看这个 我怀疑这与指令的优先级有关,但到目前为止,改变这一点并没有帮助。您可以通过设置超时来完成这一点,如。即使时间为0,它也只会在angular完成处理后运行。您可以使用类似的setTimeout来执行此操作。即使时间为0,它也只会在angular完成它的处理后运行。问题是,linky筛选器会在计算指令后添加“a”标记,element.find('a')

我想将target=“\u blank”添加到经过linky过滤器的HTML片段中。也就是说,我需要在内容完全呈现后对DOM进行后期处理

看看这个


我怀疑这与指令的优先级有关,但到目前为止,改变这一点并没有帮助。

您可以通过设置超时来完成这一点,如。即使时间为0,它也只会在angular完成处理后运行。

您可以使用类似的setTimeout来执行此操作。即使时间为0,它也只会在angular完成它的处理后运行。

问题是,linky筛选器会在计算指令后添加“a”标记,element.find('a')不会找到任何内容

我认为最好的解决方案是编写自己的url过滤器,然后调用linky过滤器,而不使用指令

更新

我也为此创建了一个JSFIDLE:

问题在于,在对指令求值后,linky筛选器将添加“a”标记,element.find('a')将找不到任何内容

我认为最好的解决方案是编写自己的url过滤器,然后调用linky过滤器,而不使用指令

更新

我也为此创建了一个JSFIDLE:

  • 打开文件
    angular sanitize.js
  • 转到第525行
  • 将其更改为
    writer.start('a',{href:url,target:'u blank'})
  • 警报-linky将立即向每个链接添加target\u blank

  • 打开文件
    angular sanitize.js
  • 转到第525行
  • 将其更改为
    writer.start('a',{href:url,target:'u blank'})

  • 警报-linky将立即向每个链接添加target\u blank

    那么只在控制器中使用一个函数怎么样

    我在控制器中使用这个:

    $scope.getTarget = function(isExternal) {
        return isExternal ? '_blank' : '';
    }
    
    在html中:

    <div ng-repeat="slide in slides" data-slider-id="{{$index}}">
        <a ng-hide="{{slide.link == ''}}" 
           href="{{slide.link}}" 
           target="{{getTarget(slide.isExternal)}}">
    ...
    
    
    ...
    
    那么在控制器中使用一个函数怎么样

    我在控制器中使用这个:

    $scope.getTarget = function(isExternal) {
        return isExternal ? '_blank' : '';
    }
    
    在html中:

    <div ng-repeat="slide in slides" data-slider-id="{{$index}}">
        <a ng-hide="{{slide.link == ''}}" 
           href="{{slide.link}}" 
           target="{{getTarget(slide.isExternal)}}">
    ...
    
    
    ...
    
    雷南的答案很好,但在页面加载后添加的链接上不起作用

    如果需要将_targetblank添加到新链接,请尝试使用带有监视事件的筛选器:

    JS

    app.directive('targetBlank', function() {
        return {
            restrict: 'A',
            link: function(scope, element, attrs) {
                scope.$watch(attrs.targetBlank, function(){
                    element.find('a').attr('target', '_blank');
                });
            }
        };
    });
    
    HTML

    <div ng-bind-html="textModel | linky" target-blank="textModel"></div>
    

    雷南的答案很好,但在页面加载后添加的链接上不起作用

    如果需要将_targetblank添加到新链接,请尝试使用带有监视事件的筛选器:

    JS

    app.directive('targetBlank', function() {
        return {
            restrict: 'A',
            link: function(scope, element, attrs) {
                scope.$watch(attrs.targetBlank, function(){
                    element.find('a').attr('target', '_blank');
                });
            }
        };
    });
    
    HTML

    <div ng-bind-html="textModel | linky" target-blank="textModel"></div>
    
    
    
    我实际做的是:我实现了一个过滤器,将/>a href/gi替换为“当然也可以”,而不需要从DOM节点中获取字符串。只是澄清一下:过滤器总是在指令之后应用。因此,在这里更改优先级顺序没有任何帮助。我实际上做的是:我实现了一个过滤器,将/>a href/gi替换为“当然也可以”,而不需要从DOM节点中获取字符串。只是澄清一下:过滤器总是在指令之后应用。因此,更改优先级顺序没有帮助。我认为更改您所依赖的库的来源不是一个好主意。我认为更改您所依赖的库的来源不是一个好主意。