复合组件中的jQuery选择器,为什么它不起作用?

时间:2015-01-25 14:01:36

标签: jquery jsf composite-component

我尝试使用jQuery选择器选择JSF组件。复合组件 .xhtml .js 相对代码是分开的,所以我通过了变量cc.cliendId如下:

var variables = {};
variables.formid = "#{cc.clientId}"; 

*。js 文件中我尝试使用它如下:$('[id="'+variables.formid+'"]')它工作并返回一个完整的div,但以下代码不起作用,它返回一个空对象[]

function escapeColons(selector) {
    return selector.replace(/(!|"|#|\$|%|\'|\(|\)|\*|\+|\,|\.|\/|\:|\;|\?|@)/g, function($1, $2) {
        return "\\\\" + $2;
    });
}

 $("#" + escapeColons(variables.formid))

逃避冒号的函数取自这个答案:https://stackoverflow.com/a/4792023/947111

如果我写$("#" + "form\\:range_chooser") range_chooser 复合组件 id ,则可以正常工作。

1 个答案:

答案 0 :(得分:1)

这并不能解决您的具体问题,但我总是发现将分隔符更改为非冲突的内容比不断转义ID更容易。您可以通过向Web.xml添加上下文参数来完成此操作。即:

<context-param>
    <param-name>javax.faces.SEPARATOR_CHAR</param-name>
    <param-value>-</param-value>
</context-param>

我应该补充一点,如果你的冒号到处都是硬编码,你必须回去改变所有这些。因此,根据您的设置,它可能比它的价值更麻烦。

修改

如果你需要保留分隔符char,你应该能够简化那个javascript:

function escapeColons(selector) {
    return selector.replace(/(!|"|#|\$|%|\'|\(|\)|\*|\+|\,|\.|\/|\:|\;|\?|@)/g,"\\$1");
}

$("#" + escapeColons(variables.formid))

无论如何都适合我。