是否存在大于和小于的JavaScript替代方案?

时间:2018-03-13 23:26:10

标签: javascript html

我正在使用某个CMS系统,我必须在编辑器中粘贴HTML代码(包括CSS和JavaScript)。

问题是它解析输入以验证html代码。我有这段有问题的代码

new someClass("xxx")

虽然它是有效的JS语法,但解析器会看到keys.sort(function(a,b) { if (a.position > b.position) return 1; if (a.position < b.position) return -1; return 0; }); <,并说这是html标记的无效语法。

我想知道JavaScript是否有另一种方法来检查大于或小于不使用这些>符号的方法。有谁知道吗?

4 个答案:

答案 0 :(得分:3)

在这种特殊情况下,假设position属性是数字类型,您可以使用以下方式实现相同的排序:

keys.sort(function(a,b) {
    return a.position - b.position;
});

但是,你应该真正考虑解决这里可能与CMS或你如何使用它的真正问题。例如,如果CMS将输入验证为XHTML,则可能需要使用此技巧:When is a CDATA section necessary within a script tag?

现在回答标题中的具体问题:

  

是否存在大于和小于的替代JavaScript?

对于数字,您可以将Math.min用作>,将Math.max用作<,如下所示:

    keys.sort(function(a,b) {
        if (Math.min(a.position,b.position) !== b.position) return 1;
        if (Math.max(a.position,b.position) !== a.position) return -1;
        return 0;
    });

答案 1 :(得分:0)

你可以这样做:

    keys.sort(function(a,b) {
        if (a.position &gt; b.position) return 1;
        if (a.position &lt; b.position) return -1;
        return 0;
    });

这将无法作为JavaScript代码正常运行,但如果将其粘贴到HTML中,它将正确显示。

答案 2 :(得分:0)

刚刚制作了一个适合你的时髦javascript黑客:

function isLessThan(a, b) {
  return Object.is((a-b)%1, -0);
}

function isGreaterThan(a, b) {
  return a !== b && Object.is((a-b)%1, 0);
}

这似乎是因为n%10-0,具体取决于n是大于等于0还是小于0。

这样使用:

keys.sort(function(a,b) {
  if (isGreaterThan(a.position, b.position)) return 1;
  if (isLessThan(a.position, b.position)) return -1;
  return 0;
});

对于您的特定用例,我建议:

keys.sort(function(a,b) { return a.position - b.position; })

信用:Mike McCaughan

参考:checking +0 vs -0

答案 3 :(得分:0)

您可以用实体替换不需要的字符。

一个php示例:

$script = str_replace( "&", "&amp;", $script );
$script = str_replace( "<", "&lt;", $script );
$script = str_replace( ">", "&gt;", $script );