3

I have a string containing content in some html tags and also some text alone.

It looks like this :

var str =  "<p></p><p><i>blabla</i></p><p><i><b>blaaaaaablaaaaa</b></i></p><iframe src="..." height="111" width="333"></iframe><p></p><p><sub>hello blabla</sub></p><p><br></p><iframe src="..." height="444" width="888"></iframe>"

I would like to extract somehow in Javascript or AngularJS only some tag (including content and attributes) then put them into an array.

For example, if I want only <iframe> tag, I should have this :

var array = ["<iframe src='...' height='111' width='333'></iframe>", "<iframe src='...' height='444' width='888'></iframe>"];

If I want <p> tag then :

var array = ["", "<i>blabla</i>","<i><b>blaaaaaablaaaaa</b></i>","","<sub>hello blabla</sub>","<br>"];

Any suggestion ? Thanks !

NOTE : Don't give an answer using Jquery please !

4
  • I believe this would fall under HTML parsing. So I would search SO for that. It's kind of a pain in the arse. Otherwise see if someone has good implementation in Regex. Commented Jun 8, 2016 at 11:57
  • stackoverflow.com/questions/9189338/… Check this out.. here is your answer. Commented Jun 8, 2016 at 11:58
  • Does extract mean also remove from string? Do you need strings of iframes or can they be dom elements also? what are you doing with the results? Commented Jun 8, 2016 at 12:12
  • @charlietfl I need strings of iframes yes, like this : "<iframe src='...' width='...' height='....' ></iframe>" Commented Jun 8, 2016 at 12:17

4 Answers 4

3

You could create an angular element and get the text out of it.

Example:

$scope.array =[];
$scope.eles=
angular.element(str).find('iframe');
[].forEach.call($scope.eles, function (ctl) {
    $scope.name.push(angular.element(ctl).text())
});

here is a demo: http://jsfiddle.net/Lvc0u55v/5122/


Edit To get all the html of the tag you can do:

angular.element(str).find('iframe');
    [].forEach.call($scope.eles, function (ctl) {
        $scope.name.push(ctl.outerHTML)
    });

demo: http://jsfiddle.net/Lvc0u55v/5123/

Sign up to request clarification or add additional context in comments.

6 Comments

On the right track but text() won't provide outerHTML of the iframe elements
This is answering 50% of my question. I need also to have the html tag with his attributes : ["<iframe src='.....' height='...' width='...'>...</iframe>", ....., "<iframe src='.....' height='...' width='...'>...</iframe>"]
@Emidomh.. instead of angular.element(ctl).text() you can also do $scope.name.push(ctl.outerHTML) to get all outer html
@NaeemShaikh Almost there but your solution is good ! Take a look to this fiddle Can you tell me why it gives me an empty array ?
@Emidomh look at at this jsfiddle.net/8cgebbf9/2 . you need a wrapper coz angular element needs to be one to be created.
|
1

try this code:

var iFrameArr= str.match("<iframe>(.*)<iframe>");
var iFrameContent = iFrameArr[1];

Comments

0

You will want to look at splitting up the string with regex using a filter such as '(<iframe>).*(<\/iframe>)'. This will find the tags of and as well as everything in between, putting it into a capture group per iteration found.

Comments

0

Set the html content to the DOM and extract the iframe tag using jquery

Assuming you have a div with id='test' in your DOM

var str = "<div> .... </div> <iframe src=".....">..</iframe> 
  text blabla 
  <iframe src="....."> ....blabla2.... </iframe> 
  ....
  <p>.....</p> 
  ......";
$('#test').html(str);

var ar=[]
$('#test iframe').each(function() {
    var x = $(this).wrap('<p/>').parent().html();//wrap the iframe with element p and get the html of the parent
    ar.push(x)//add the html content to array
});

//now ar contains the expected output

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.