【发布时间】:2013-08-25 01:22:29
【问题描述】:
好的,所以这可能有点难以解释。 我的函数被赋予了一个目标元素,并使用 innerHTML 在元素中显示一个 ID。然后,该 ID 也会出现在一个类的名称中,该类也必须是目标。但是,ID 可能包含“+”、“/”或“\”字符,这会阻止 jQuery 在变量中使用 ID。
编辑:我没有提到,当我说 ID 时,这不是元素 ID。它是一个用户 ID,我可以使用它来定位多个元素,因为它出现在类名和页面上。
代码如下:
function goFilt(filtID) {
var ptbf = document.getElementById("pc" + filtID);
var ptbfIdc = ptbf.getElementsByClassName("hand");
var ptbfId = ptbfIdc[0].innerHTML;
ptbf.className = 'animated hinge';
setTimeout(function () {
$q("#pc" + filTar).animate({
height: "1px"
}, 500);
}, 1000);
setTimeout(function () {
$q("#pc" + filTar).css("display", "none");
}, 1500);
setTimeout(function () {
$q(".id_" + ptbfId).parent().parent().parent().parent().animate({
opacity: 0
}, 500);
setTimeout(function () {
$q(".id_" + ptbfId).parent().parent().parent().parent().animate({
height: "1px"
}, 500);
}, 500);
}, 1500);
setTimeout(function () {
$q(".id_" + ptbfId).parent().parent().parent().parent().css("display", "none");
}, 2500);
}
假设我们的 ID 是 VmOR+MU8。 我们通过使用类名“hand”标记元素并获取内部 html 来获得它,并将其保存为变量 ptbfId。 然后我们需要使用类 id_VmOR+MU8 来标记元素,但我们不能使用 $q(".id_" + ptbfId),因为 ID 中的“+”会停止工作。 那是我的问题。缺少正则表达式的愚蠢解决方法,我想不出如何解决这个问题。在那之后,ID 也需要可用,所以如果答案是将坏字符换成临时字符,那么它需要能够快速互换。
你们有什么帮助吗?
编辑 2:小提琴示例:http://jsfiddle.net/RpVr2/
【问题讨论】:
-
无论如何,
+符号在id中不是有效字符。ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").这是糟糕的设计,改变它。 -
@MasterAM 在 HTML5 中不再适用,请参阅 w3.org/html/wg/drafts/html/master/dom.html#the-id-attribute
-
那么为什么不继续使用 getElementById/getElementsByClassName 就像在第一行中所做的那样(或者尝试 querySelect/querySelectorAll),然后将生成的元素包装在 jQuery 对象中?
-
@bfavaretto,我的立场是正确的。但是,我仍然认为整体设计是有问题的。由于您已经在计时器回调中保留了作用域变量,因此您至少可以为所有这些父节点赋予有意义的名称,并避免完全重新选择同一个节点。
-
@MasterAM 我同意这一点;如果可以避免异常/有问题的 id,那就更好了。我只是说它们不再无效。
标签: javascript jquery class variables operator-keyword