Javascript(或jquery)获取textarea值的每个图像标记

时间:2015-02-22 09:40:17

标签: javascript jquery image tags textarea

假设我有一个textarea值为:

<p>..random content..</p>
<img src="myimage1.jpg" />
<p>..random content..</p>
<img src="myimage2.png" />
<p>..random content..</p>

我想检查每个img标记出现并将src存储在数组中。像这样:

function img_find() {
    var imgs = // the result of the checking of the textarea
    var imgSrcs = [];

    for (var i = 0; i < imgs.length; i++) {
        imgSrcs.push(imgs[i].src);
    }

    return imgSrcs;
}

我如何实现这一目标?

解决

将它附加到另一个隐藏的div,类似这样:

  $('#hiddenContent').append $('textarea[name=content]').val()   $img
= $('#hiddenContent').find('img')   $("#hiddenContent > img").each (i, ele) ->
    html = '<div class="image">
                <img src="' + $(ele).attr('src') + '" class="thumbnail" width="100" title="Click to remove" />
                <p>Image location: <b>' + $(ele).attr('src') + '</b> (copy <b>bolded</b> text to use on your content)</p>
                <p><small>click image to remove</small></p>
                </div>'
    $('.contentImages').append html

3 个答案:

答案 0 :(得分:1)

function getSrc(textarea) {
    var temporaryElement = document.createElement('div');

    temporaryElement.innerHTML = textarea.value;

    var images = temporaryElement.getElementsByTagName('img');

    var output = [];

    for (var i = 0; i < images.length; i++) {
        output.push(images[i].src);
    }

    return output;
}

console.log(getSrc(document.getElementById('textarea')));

已更新!

答案 1 :(得分:0)

您可以使用CSS选择器querySelectorAll() https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll

例如使用lodash unescape

<textarea id="content">
  <p>..random content..</p>
  <img src="myimage1.jpg" />
  <p>..random content..</p>
  <img src="myimage2.png" />
  <p>..random content..</p>
</textarea>

<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/3.3.0/lodash.min.js"></script>
<script>
function img_find(id) {

  var dom = document.getElementById(id);

  var e = document.createElement('div');

  e.innerHTML = _.unescape(dom.innerHTML); // Or use regex to replace &lt; to < and &gt; to >

  var imgs = e.querySelectorAll('img');

  var srcCollection = [];

  for (var i = 0; i < imgs.length; i++) {
    srcCollection.push(imgs[i].src);
  }

  return srcCollection;
}

img_find('content'); // ["myimage1.jpg", "myimage2.jpg"]
</script>

答案 2 :(得分:0)

这是你应该做的,使用正则表达式:

JSFIDDLE:http://jsfiddle.net/ewh8qe0t/1/

function img_find() {
  var imgs = '<p>..random content..</p><img src="myimage1.jpg" /><p>..random content..</p><img src="myimage2.png" /><p>..random content..</p>';
  var regex=/src="([A-z]+\d*\.[A-z]{3})"/g;
  var imgSrcs = [], found;
  while (found = regex.exec(imgs)) {
    imgSrcs.push(found[0].split('=')[1].replace(/"/g,''));
  }
  return imgSrcs;
}
alert(img_find());