使用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)