如何在变量上使用StartsWith选择器?

时间:2016-08-15 03:40:26

标签: javascript jquery

根据jQuery's API StartsWith选择器旨在用于整个文档。

例如,

var $elements = $( "span[id^='MJXc']" );

会在DOM中找到ID为&#39; MJXc&#39;的所有<span>

但是如果我有一个存储在变量中的元素数组并且我只想选择那些以...开头的那些元素呢?我还可以使用StartsWith选择器吗?

以下似乎不起作用并发出Uncaught SyntaxError: Unexpected token (

var $elements = $arrayofelements.( "span[id^='MJXc']" );

我没有添加或删除任何括号,我只是将一个变量放在选择器前面。

$arrayofelements在控制台中看起来像这样:

0:span#MJXc-Node-7.mjx-mrow
1:span#MJXc-Node-28.mjx-mi
2:span.mjx-base
3:span#MJXc-Node-34.mjx-mi

理想情况下,我希望将元素0,1和3重新设置,跳过元素2,因为它没有以&#39; MJXc&#39;开头的ID。

2 个答案:

答案 0 :(得分:2)

在JQuery中使用.filter()方法。

$arrayOfElements.filter('span[id^=MJXc]');

与大多数JQuery方法一样,它需要一个选择器。它返回一个新的JQuery对象,该对象仅包含与选择器匹配的元素(在本例中,是一个ID为MJXc的范围)。

&#13;
&#13;
// get only the spans inside #parent div
$spansToFilter = $('#parent').children();
$filteredSpans = $spansToFilter.filter('[id^=MJXc]');

// prove we've filtered out the span with no matching ID
$filteredSpans.each(function(i, item) {
  console.log(item);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<span id="MJXc-Node-7.mjx-mrow">(external skip)</span>

<div id="parent">
    <span id="MJXc-Node-7.mjx-mrow">A</span>
    <span id="MJXc-Node-28.mjx-mi">B</span>
    <span class=".mjx-base">(skip C)</span>
    <span id="MJXc-Node-34.mjx-mi">D</span>
</div>
&#13;
&#13;
&#13;

您尝试的内容无效,因为Javascript whatever.()无效;你试图调用一个没有名字的函数。在JQuery和javascript中,您始终在链obj.method()中的前一个对象上调用方法。这些方法返回了具有相同方法集的新JQuery对象,这使得链接成为可能。 JQuery对象拥有的所有方法都列在JQuery documentation中,包括.filter().find().children()等。

答案 1 :(得分:1)

javascript具体答案:

从您的$elements数组

,您只需检查您的元素startsWith()的ID是否为特定前缀。它确实如此,你可以简单地将它推入新阵列。

var $selectedElements = [];

for(var i=0; i<$elements.length; i++)
    if($elements[i].id.startsWith("MJXc")) 
        $selectedElements.push($elements[i]);