1

我有几组元素,每组都与一个特定的数字有关。我想为每个元素添加一个鼠标悬停,为其组中的所有元素添加一个类,以及一个删除该类的鼠标悬停。只要我给它一个字符串文字,jQuery 的 attributeStartsWith 选择器就可以很好地工作,但是我正在尝试编写一个函数来对任何组执行此操作,因此我需要选择将参数作为子字符串。有没有办法用attributeStartsWith做到这一点,或者我应该尝试一些其他技术?

这是我的工作:

function highlight(numberString)
{ $('p[id^="321"]').addClass("highlighted");  }

我需要用参数 numberString 替换“321”。以下似乎没有这样做。我认为这是因为 attributeStartsWith 将 numberString 视为未加引号的单字字符串,而不是变量名。

function highlight(numberString)
{ $('p[id^=numberString]').addClass("highlighted");  }
4

1 回答 1

2

只需将参数插入并引用为字符串:

function highlight(numberString) {
    $('p[id^=' + numberString + ']').addClass("highlighted");
}

http://jsfiddle.net/g3qHX/

顺便说一句,Javascript 没有像 PHP 那样的可变字符串扩展/插值。如果您考虑一下,这很明显,但是仍然可能发生遗留问题,从而导致问题(如果这是您的情况)。

此外,您在选择器中测试的值不需要引用,除非它有空格,因此可能不需要以下内容但不会造成伤害

function highlight(numberString) {
    $('p[id^="' + numberString + '"]').addClass("highlighted");
}

http://jsfiddle.net/g3qHX/1

注意"我添加的。id无论如何,值中不应包含空格,但如果将其与其他属性选择器一起使用,则需要小心。

另一个注意事项是idHTML5 之前的属性要求以字母数字字母开头(不能仅是字母数字数字)。HTML5 改变了这一点,但我认为(我的偏好和建议)是在大多数用例中应该遵循以前的标准。

于 2012-07-30T00:31:20.820 回答