使用AngularJS替换字符串中的html标记属性

时间:2016-06-09 08:59:26

标签: javascript html angularjs

我有一个包含html标签的字符串:

var str =  "<div><p></p><p><i>blabla</i></p><p><i><b>blaaaaaablaaaaa</b></i></p><iframe src='urlAAA' height='400' width='800'></iframe><p></p><p><sub>hello blabla</sub></p><p><br></p><iframe src='urlBBB' height='400' width='800'></iframe></div>"; 

我想以这种方式用<iframe>标记替换每个<button>标记:

第一个iframe

"<button type="button">Click Me for iframe n°1 !</button>"

第二个iframe

"<button type="button">Click Me for iframe n°2 !</button>"

等...

我正在使用angularJS。我认为解决方案是做这样的事情:

var ele = angular.element(str);
ele.replaceWith(function(index){
        return "<button type='button'>Click Me for iframe n°" + index + " !</button>";
});

但我不知道如何为<iframe>代码

指定此内容

有什么建议吗?谢谢!

编辑:

这是一个新的例子,我想做的事情:

var str我有2个<iframe>个标签,其中src属性值不同:

第一个iframe有src='urlAAA' 第二个src='urlBBB'

我希望能够访问src属性并将其替换为另一个url。

function editFrameAttributes(str){
      var array =[];
      var eles= angular.element(str).find('iframe');
      [].forEach.call(eles, function (ctl) {
        array.push(ctl.outerHTML)
      });
      Object.keys(array).forEach(function (key) {
        var tempEl = document.createElement('div');
        tempEl.innerHTML = array[key];

        tempEl.childNodes[0].attributes['src'].value = "www.something.com";
        tempEl.childNodes[0].attributes['width'].value = '1234';

        array[key] = tempEl.innerHTML;
      });
      //then I don't know how to replace old iframes by new iframes in 'str' 

      return newStr;
    }

输出应如下所示:

var str =  "<div><p></p><p><i>blabla</i></p><p><i><b>blaaaaaablaaaaa</b></i></p><div><iframe src='www.something.com' height='400' width='1234'></iframe></div><p></p><p><sub>hello blabla</sub></p><p><br></p><div><iframe src='www.something.com' height='400' width='1234'></iframe></div></div>"; 

2 个答案:

答案 0 :(得分:1)

请参阅此fiddle

当您使用字符串生成角度元素时,您只需将<iframe>替换为字符串本身中的<button>即可。

示例:

$scope.str='<iframe>some iframe text<span>span content</span><span>more span content</span></iframe>';

$scope.newStr= $scope.str.replace('<iframe>','<button>').
replace('</iframe>','</button>')

答案 1 :(得分:1)

最后,我找到了解决方案:

function editFrameAttributes(str,newSrc){
      var eles = angular.element("<div>"+str+"</div>");
      eles.find('[src]').each(function() {
        this.src = newSrc;
      });
      return eles.html();
    }