javascript 如何根据动态生成的字符串然后动态生成JS文件(script标签)里面的代码
三叔
三叔 2017-06-12 09:29:03
0
2
831

我的代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/2.0.0/jquery.min.js"></script>
</head>
<body>
<p class="name name0">
    <p>test</p>
</p>
<p class="name name1">
    <p>test2</p>
</p>

<script>
    function func1(className) {
        return `$('${className}').find('p').text()`
    }
    
    for(var i=0;i<$('.name').length;i++){
        console.log(`name${i} p:`,func1(`.name${i}`));
    }
    //第一次循环生成语句: $('.name0').find('p').text();
    //第二次循环生成语句: $('.name1').find('p').text();
</script>
</body>
</html>

我并不是想获取每个P的值,只是打个比方。我想知道如何才能通过func1()的返回值动态渲染<script>里面的代码?或者如何才能动态渲染js文件

我想当前代码的这个文件根据.name p 动态生成js代码,如
当有两个.name p

<p class="name name0">
    <p>test</p>
</p>
<p class="name name1">
    <p>test2</p>
</p>

那么<script>里面最终的代码应该是

<script>
    $('.name0').find('p').text();
    $('.name1').find('p').text();

</script>

当有三个.name p

<p class="name name0">
    <p>test</p>
</p>
<p class="name name1">
    <p>test2</p>
</p>
<p class="name name2">
    <p>test3</p>
</p>

那么<script>里面最终的代码应该是

<script>
    $('.name0').find('p').text();
    $('.name1').find('p').text();
    $('.name3').find('p').text();
</script>

请问一下如何才能实现这样的效果?

三叔
三叔

全部回复(2)
阿神

你是想fun1() 里面的return的结果作为执行js语句??可以用eval()才执行

三叔

你可以直接定义 fun1 返回指定 className DOM 的 text,后面直接跑就行哇。反正你生成代码也是想立即执行的。

function func1(className) {
    return $(className).find("p").text();
}

for (var i = 0; i < $(".name").length; i++) {
    console.log(`name${i} p:`, func1(`.name${i}`));
}

你不需要动态生成脚本啊,脚本本身是很灵活的东西。下面这段代码与你想生成的那一段等效

var textArray = $(".name p")
    .map(function() {
        return $(this).text()
    }).toArray();

如果你想循环处理每一个 .name p 可以直接

$(".name p")
    .each(function() {
        $p = $(this);
        // ....
    })

如果你想处理指定名称的,可以

// ES6 语法,若需要可转换为 es5 的
var textArray = ["name1", "name2", "namen"]
    .map(name => $(`.${name}`))
    .map($name => $name.children("p").text());
    // 这里本来就是原生数组,不需要 toArray()

所以你要做的事情一定非要用动态生成脚本来处理吗?如果真的需要,这一般也是服务端干的事情,而不是前端干的事情。前端可以生成脚本来运行,就一定可以直接运行某段代码……

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板