You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JS/jQuery中嵌入生成HTML的PHP代码以避免语法错误?

解决JS中嵌入PHP生成HTML导致的语法错误问题

在JS脚本的HTML字符串中执行PHP动作时,出现**Uncaught SyntaxError: Unexpected token '='**错误,原因是PHP输出的HTML包含换行、未转义的引号等内容,直接插入JS字符串会破坏语法结构。

原代码示例

<script type="text/javascript">
(function($) {
    $('.menu-main').on('click', function() {
        var page   = window.location.href;
        var mobile = $('.menu-item-mobile');
        var search = '<div class="wpml-language-switcher"><?php do_action('wpml_add_language_selector'); ?></div>';

        setTimeout(function() {
            if(mobile.find('form').length == 1) return;
            mobile.html(search);
        }, 50);  //delay time   
    });
})(jQuery);
</script>

报错后的输出代码(语法被破坏)

<script type="text/javascript">
(function($) {
    $('.av-burger-menu-main').on('click', function() {
        var page   = window.location.href;
        var mobile = $('.menu-item-search-mobile');
        var search = '<div class="wpml-floating-language-switcher">'
<div
     class="wpml-ls-statics-shortcode_actions wpml-ls wpml-ls-legacy-dropdown js-wpml-ls-legacy-dropdown" id="lang_sel">
    <ul>

        <li tabindex="0" class="wpml-ls-slot-shortcode_actions wpml-ls-item wpml-ls-item-lv wpml-ls-current-language wpml-ls-first-item wpml-ls-item-legacy-dropdown">
            <a href="#" class="js-wpml-ls-item-toggle wpml-ls-item-toggle lang_sel_sel icl-lv">
                                                    <img
            class="wpml-ls-flag iclflag"
            src="https://sampledomain.com/wp-content/plugins/sitepress-multilingual-cms/res/flags/lv.png"
            alt=""
            width=18
            height=12
    /><span class="wpml-ls-native icl_lang_sel_native">LV</span></a>

            <ul class="wpml-ls-sub-menu">
                
                    <li class="icl-en wpml-ls-slot-shortcode_actions wpml-ls-item wpml-ls-item-en">
                        <a href="https://sampledomain.com/en/" class="wpml-ls-link">
                                                                <img
            class="wpml-ls-flag iclflag"
            src="https://sampledomain.com/wp-content/plugins/sitepress-multilingual-cms/res/flags/en.png"
            alt=""
            width=18
            height=12
    /><span class="wpml-ls-native icl_lang_sel_native" lang="en">EN</span></a>
                    </li>

                
                    <li class="icl-ru wpml-ls-slot-shortcode_actions wpml-ls-item wpml-ls-item-ru wpml-ls-last-item">
                        <a href="https://sampledomain.com/ru/" class="wpml-ls-link">
                                                                <img
            class="wpml-ls-flag iclflag"
            src="https://sampledomain.com/wp-content/plugins/sitepress-multilingual-cms/res/flags/ru.png"
            alt=""
            width=18
            height=12
    /><span class="wpml-ls-native icl_lang_sel_native" lang="ru">RU</span></a>
                    </li>

                            </ul>

        </li>

    </ul>
</div>
'</div>';

        setTimeout(function() {
            if(mobile.find('form').length == 1) return;
            mobile.html(search);
        }, 50);  //delay time   
    });
})(jQuery);
</script>

解决方案

方法1:用PHP捕获并转义HTML内容

通过PHP的输出缓冲区捕获WPML生成的HTML,转义JS字符串中的特殊字符(换行、单引号等),再插入到JS中:

<script type="text/javascript">
(function($) {
    $('.menu-main').on('click', function() {
        var page   = window.location.href;
        var mobile = $('.menu-item-mobile');
        <?php
        // 开启输出缓冲区捕获WPML的HTML
        ob_start();
        do_action('wpml_add_language_selector');
        $wpml_html = ob_get_clean();
        // 转义JS字符串需要处理的特殊字符
        $wpml_html = str_replace(["\n", "\r", "'"], ["", "", "\\'"], $wpml_html);
        ?>
        var search = '<div class="wpml-language-switcher"><?php echo $wpml_html; ?></div>';

        setTimeout(function() {
            if(mobile.find('form').length == 1) return;
            mobile.html(search);
        }, 50);  //delay time   
    });
})(jQuery);
</script>

方法2:提前渲染隐藏容器,JS直接调用

把WPML语言选择器提前渲染到页面的隐藏元素里,点击时直接读取该元素的HTML内容,避免字符串拼接的问题:

<!-- 提前渲染隐藏的语言选择器模板 -->
<div id="wpml-lang-switcher-tpl" style="display: none;">
    <?php do_action('wpml_add_language_selector'); ?>
</div>

<script type="text/javascript">
(function($) {
    $('.menu-main').on('click', function() {
        var page   = window.location.href;
        var mobile = $('.menu-item-mobile');
        // 直接获取提前渲染好的HTML
        var search = '<div class="wpml-language-switcher">' + $('#wpml-lang-switcher-tpl').html() + '</div>';

        setTimeout(function() {
            if(mobile.find('form').length == 1) return;
            mobile.html(search);
        }, 50);  //delay time   
    });
})(jQuery);
</script>

方法3:使用WPML官方JS API(优先推荐)

如果WPML提供了前端生成语言选择器的JS接口,直接调用官方API,既能避免语法问题,也能保证兼容性。

内容的提问来源于stack exchange,提问作者twelvell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 09:01:30