String.replace的超时

时间:2017-07-25 19:24:12

标签: javascript jquery

我正在尝试通过javascript将宽度和高度属性添加到标记中。 img src将来自网络(http://www....。)。我正在使用javascript.replace来添加高度和宽度。这是我的代码。 (目前仅适用于宽度)。

<!DOCTYPE html>
<html>

<body>
    <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
    <script>
    $(window).load(function() {

        var htmlString = '<div class="sample"> <img src="https://kbob.github.io/images/sample-5.jpg"> </div><div class="sample_another"><img src="http://www.crazymonkeydefense.com/wp-content/uploads/2012/02/sample-img3.png"> </div> ';

        function dostuff(img, imgString) {
            img.onload = function() {

                imgString = imgString.replace("<img ", '<img width="' + this.width + 'px" ');
                console.log("modified = " + imgString);
            };
        }

        var modifyImg = function(imgString) {
            console.log("original = " + imgString)

            if (imgString.indexOf('width="') == -1) {
                var newImgString = (imgString.substring(imgString.lastIndexOf('src="'), imgString.lastIndexOf('"'))).replace('src="', '');
                var img = new Image();
                img.src = newImgString;
                dostuff(img, imgString);
            }
            return imgString;
        }

        modifiedHtmlString = htmlString.replace(/<img[^>]+>/g, modifyImg);
        console.log(modifiedHtmlString);


    });
    </script>
</body>

</html>

这个问题是htmlString.replace(/] +&gt; / g,modifyImg)这会立即执行,并将ModifyImg值设置为undefined,而不是从return语句中获取它。

我如何处理此解决方案。

1 个答案:

答案 0 :(得分:0)

使用done()功能可以帮助您解决此问题。

$.when(ModifyImg).done(function(v){
  modifiedHtmlString =  htmlString.replace(/<img[^>]+>/g,v);
  console.log(modifiedHtmlString);
});