空<p>元素实际上不是空的?阿斯奇控制字符?



使用JavaScript,我将遍历一个对象数组。如果对象有1个或多个非null或空的值,则创建一个<p>元素,然后将其附加到容器元素中。

var tempElem = document.createElement("P");
if( item.valueOne !== '' )
    tempElem.innerHTML += item.valueOne;
if( item.valueTwo !== '' )
    tempElem.innerHTML += item.valueTwo;
if( tempElem.innerHTML !== '' )
    containerElem.appendChild(tempElem);

上面的过滤掉了大部分的空条目,但是也有一些以某种方式进入了页面。
在铬上,它完全显示<p></p>
我做了一些分析,在最后一个if语句之前…

typeof tempElem.innerHTML = string
tempElem.innerHTML.length = 4
tempElem.innerHTML.charCodeAt(0) = 1
tempElem.innerHTML.charCodeAt(1) = 1
tempElem.innerHTML.charCodeAt(2) = 1
tempElem.innerHTML.charCodeAt(3) = 1
tempElem.innerHTML.charCodeAt(4) = NaN

我在这个问题上很困惑。实际的数据是json和这些特定的值,我看到key:""。这和那些被过滤的完全一样

我知道我可以在创建任何类型的dom元素之前检查javascript中的值,但我想知道是什么导致了这一点,以及如何直接修复它。

原来是由于我使用了.trim()方法。
STRING.trim()不能删除x00 (Header的开始),x01 (Text的开始)等字符。
如果出现在一个空字符串中,这些字符仍然会通过===""检查。

对于我的特定目的,这个简单的正则表达式解决了这个问题:
str.match(/[^x00-x20x7F]/)
(如果至少存在一个非空格或'empty'字符,则返回true)

最新更新