我正在使用某个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是否有另一种方法来检查大于或小于不使用这些>
符号的方法。有谁知道吗?
答案 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 > b.position) return 1;
if (a.position < 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%1
是0
或-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; })
答案 3 :(得分:0)
您可以用实体替换不需要的字符。
一个php示例:
$script = str_replace( "&", "&", $script );
$script = str_replace( "<", "<", $script );
$script = str_replace( ">", ">", $script );