0

我需要进行 DOM 替换,如下所示:

$("#target").html('<?php echo $html?>');

其中$html变量可能是一个复杂的标记

$html = '<div>
    <input type="text" name="test" />
  </div>';

当然,我需要某种转义,否则 javascript 引擎将在第一个 crlf 或引用时因语法问题而中断。在 Rails 中,有一个简单的函数escape_javascript使它变得非常容易。cakephp中有类似的东西吗?

4

2 回答 2

1

我认为使用

$("#target").html('<?php echo $this->element("element_path"); ?>');

更有意义。但这取决于您的 element_path.ctp 文件中的内容。另一方面,像这样放入替换 HTML 有点奇怪。特别是如果它很重要,我会进行 ajax 调用来加载 HTML 并让 Controller 函数返回元素的内容。

$("#target").html('Loading...').load('/myController/loadHtml/');

和 myController

function loadHtml(){
    $this->layout = false;
}

以及函数 app/View/my/load_html.ctp 的视图:

<?php echo $this->element("element_path"); ?>
于 2013-10-29T12:33:52.050 回答
0

您可以使用requestAction来做到这一点

在您的视图文件中添加以下代码

$html = $this->requestAction('/tests/func_name');

echo $this->Html->scriptBlock('
    $("#target").html('. $this->Js->value($html) .');
');

在您的 TestsController 中。

public function func_name() {
    $this->layout = 'layout_name'; // The layout you want here for design.

    $this->render('/Elements/element_name'); // you can directly render the content of element by writing like this.
}
于 2013-10-29T14:31:32.023 回答