【问题标题】:Operator characters in variables stop jQuery targeting变量中的运算符字符停止 jQuery 定位
【发布时间】: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


【解决方案1】:

使用 1 个反斜杠转义 +/,使用 2 个反斜杠转义反斜杠

【讨论】:

  • replace 不起作用,因为它们有可能出现不止一次。如果我要走那条路,我认为我需要全局正则表达式,但我不确定这是否会起作用。我正在尝试在类名中使用存储的字符串,并且afaik,转义字符应该被读取为常规字符。我不是 100% 确定这不是 jQuery 错误,而不仅仅是上下文不受欢迎的操作。
  • 感谢您的提琴,我不确定是否只有我,因为我无法在我的代码上下文中应用您的示例。我敲了一个与我实际正在做的事情不一样的小提琴,也许它会有所帮助。 jsfiddle.net/RpVr2 基本上,所有你需要知道的,就是当你点击的时候!!在 ID 旁边,具有该 ID 的所有容器都应该消失,但您可以看到 ID 中带有 + 的容器不会。感谢您的所有帮助。
  • 原来是逃逸作品,很抱歉我太密集了才意识到。另一位朋友帮忙,我们使用正则表达式而不是替换,尽管您的答案从一开始就非常完美。谢谢!
猜你喜欢
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
相关资源
最近更新 更多