javascript Comment générer dynamiquement le code dans le fichier JS (balise de script) en fonction de la chaîne générée dynamiquement
三叔
三叔 2017-06-12 09:29:03
0
2
802

Mon code est le suivant

<!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>

Je ne veux pas obtenir la valeur de chaque P, juste par analogie. Je veux savoir comment restituer dynamiquement le code dans <script> via la valeur de retour de func1() ? Ou comment rendre dynamiquement des fichiers js

Je veux que ce fichier du code actuel génère dynamiquement du code js basé sur .name p, comme
quand il y a deux .name p

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

Ensuite, le code final dans <script>

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

</script>

Quand il y a trois .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>

Ensuite, le code final dans <script>
<script>
    $('.name0').find('p').text();
    $('.name1').find('p').text();
    $('.name3').find('p').text();
</script>

Comment pouvons-nous obtenir cet effet ?

三叔
三叔

répondre à tous(2)
阿神

Voulez-vous que le résultat renvoyé dans fun1() soit utilisé comme instruction d'exécution js ? ? Vous pouvez utiliser eval() pour exécuter

三叔

Vous pouvez définir directement fun1 pour renvoyer le texte du className DOM spécifié, puis simplement l'exécuter directement. Quoi qu’il en soit, lorsque vous générez du code, vous souhaitez l’exécuter immédiatement.

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

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

Vous n'avez pas besoin de générer dynamiquement des scripts, le script lui-même est très flexible. Le code ci-dessous est équivalent à celui que vous souhaitez générer

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

Si vous souhaitez parcourir chacun .name p, vous pouvez directement

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

Si vous souhaitez traiter le nom spécifié, vous pouvez

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

Donc, ce que vous voulez faire doit être géré par des scripts générés dynamiquement ? Si cela est vraiment nécessaire, c'est généralement quelque chose que le serveur fait, et non le frontal. Si le front-end peut générer un script à exécuter, il peut certainement exécuter un certain morceau de code directement...

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal