【问题标题】:javascript Filter function is not working in IE 11 but working fine in Chrome and Mozillajavascript 过滤器功能在 IE 11 中不起作用,但在 Chrome 和 Mozilla 中运行良好
【发布时间】:2017-05-02 09:09:24
【问题描述】:

过滤器功能在 IE 11 Edge 中不工作,但在 Chrome 中工作正常 和 Mozilla 。我正在处理以下代码

var data = $(".chartsValue text");

var filteredData=data.filter(function()
 { return $(this).css('font-weight') == 'bold';
 }).text();

我在下面的 html 中获取值

<g class="chartsValue" style="cursor:pointer;text-align:center;" transform="translate(101,10)">
<rect x="0" y="0" width="19" height="16" strokeWidth="0" fill="none" rx="0" ry="0">
</rect>
<text x="0.828125" zIndex="1" style="font-size:11;font-weight:bold;color:black;fill:black;" y="14">
6m
</text>

所以,我也需要通过 IE Edge 中的样式获取 6m 值

【问题讨论】:

  • 您是否尝试过使用原生对象而不是 jQuery 包装对象? IE11 的 jQuery 中可能存在错误
  • 感谢@DanielCooke 我相信 $(this).css 在 IE 中无法正常工作

标签: javascript jquery html css .net


【解决方案1】:

感谢大家的快速响应我通过使用属性属性解决了这个问题

var filteredData =data.filter(function()
{
    return $(this).attr('style').indexOf('bold') > -1;
}).text();

【讨论】:

    【解决方案2】:

    实际上,我们可以提取一个filter 函数并使用纯JavaScript 甚至通过NodeList 类型进行迭代:

    const els = document.querySelectorAll('g.chartsValue text');
    
    const filter = fn => x => Array.prototype.filter.call(x, fn);
    
    const r = filter(e => e.style['font-weight'] === 'bold')(els).map(x => x.innerText)
    
    console.log(r)
    <g class="chartsValue" style="cursor:pointer;text-align:center;" transform="translate(101,10)">
    <rect x="0" y="0" width="19" height="16" strokeWidth="0" fill="none" rx="0" ry="0">
    </rect>
    <text x="0.828125" zIndex="1" style="font-size:11;font-weight:bold;color:black;fill:black;" y="14">
    6m
    </text>
    </g>

    在 Edge、Firefox 和 Chrome 中测试。

    【讨论】:

    • 感谢@wostex 提供的解决方案,但我仍然相信箭头在 IE 中不支持。我提供了我的解决方案。请看一下
    • 我已经测试过代码,它可以在 IE 中运行。如果您不喜欢箭头 - 您可以将其重写为常规语法。无论如何,这取决于您选择哪种方法。
    • 是的,我不确定我在 IEedge 上使用,并且仅在控制台中它在第二行给出语法错误
    • @user2147163 我无法复制它。如果你重写成 es5 语法,它会比现在更冗长,可能不值得。
    【解决方案3】:

    jQuery 的.filter(function) 根据您的函数返回一个元素子集。如果你想访问结果子集中的第一个元素,你应该使用.first() 例如:

    var data = $(".chartsValue text");
    
    var filteredData = data.filter(function () {
        return $(this).css("font-weight") === "bold";
    }).first().text();
    

    如果结果子集中有多个元素,您可以使用.map(function) 例如:

    var data = $(".chartsValue text");
    
    var filteredData = data.filter(function () {
        return $(this).css("font-weight") === "bold";
    }).map(function () {
        return $(this).text();
    });
    

    您可能还想使用String.trim() 修剪返回的文本,例如: .text().trim();

    【讨论】:

    • @user2147163 如果此代码不能解决问题,请考虑发布更多您的代码,因为根据您提供给我们的内容,很难知道我的回答是否适合您。
    • 谢谢@Daft 我相信css属性在IE11中不起作用。请检查我提供的答案
    • @user2147163 Internet Explorer 是否将text-元素的内容呈现为粗体?因为我怀疑 Internet Explorer 不处理自定义元素及其样式,因为它应该并因此给你它根本没有处理 css 的 font-weight 的结果。
    • 是的@Daft这是可能的。请检查我的答案我使用了属性属性样式并为我工作。所以,我相信前一行代码没有抛出任何错误,但结果是空的所以,我不确定到底是什么坏了
    • @user2147163 我已经看到你的回答,但它回答了一个你没有在你的帖子中介绍的问题,因此我没有投票,但如果你决定重新格式化这两个问题和答案反映了这一事实。至于我问你是否可以确认 Internet Explorer 是否正确处理自定义元素的意图:如果确实确认了,那么我可能已经在 jQuery 上发布了一个错误,并且可能考虑帮助他们解决它.css(propertyName) 确实在自定义元素上按预期工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多