Jas*_*vis 4 javascript jquery trim
这是一个简化的演示,需要复制我需要做的事情.
在我的JavaScript应用程序中,我在项目任务记录上有一个Click事件.
单击任务时,我使用DOM中与所单击的任务记录相关的数据填充JavaScript对象.
我的问题是,当我从DOM打印出保存到我的对象的值时,我的字符串前面和后面总是有大量的空格字符.

我有这个Shim来使用更新的内置JavaScript trim()函数...
/* JavaScript trim() method is ES 5, just in case polyfill it (IE 8 and down):
* example usage:
* var str = " a b c d e f g ";
* var newStr = str.trim();
*/
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g, '');
};
}
Run Code Online (Sandbox Code Playgroud)
下面我为这个问题提出了一个简单的演示.
您将看到存储的JavaScript对象 taskDataObject
(注意:我意识到下面的实际选择器代码很恶心,这是我的待办事项列表中的下一个!)
这个JSFiddle页面包含显示我运行的演示的所有代码:http:
//jsfiddle.net/jasondavis/2hkz0gp4/
当.taskName被点击时,它从DOM抓住数据,并将其保存到taskDataObjectJavaScript对象.
我正在寻找一种将此str.trim()代码应用于所有属性的好方法,taskDataObject并希望我不必制作一堆临时变量.
演示代码
//Open Task Modal when a Task record is clicked in Task List
$('body').on('click', '.taskName', function() {
// Set and Cache Task ID from clicked on Task Item
var taskId = $(this).parent().parent().parent().dataAttr('task-id');
var $taskEl = $(this);
// Populate Task Data Object from DOM values
taskDataObject = {
//projectId: projectTaskModal.cache.projectId,
taskId: taskId,
taskName: $taskEl.text(),
taskDescription: $taskEl.next('.description').text(),
taskStatus: $taskEl.parent().parent('td').next().text(),
taskPriority: $taskEl.parent().parent('td').next().next().text(),
taskTags: $taskEl.parent().parent('td').next().next().next().text(),
taskCreatedDate: $taskEl.parent().parent('td').next().next().next().next().text(),
taskModifiedDate: $taskEl.parent().parent('td').next().next().next().next().next().text(),
taskDueDate: $taskEl.parent().parent('td').next().next().next().next().next().next().text(),
};
console.log('taskDataObject', taskDataObject);
// Just playing around, this applies the trim() however I had
// to create a bunch of temp variables and I am not sure if
// this can be avoided or done differently?
for (var key in taskDataObject) {
if (taskDataObject.hasOwnProperty(key)) {
alert(key + " -> " + taskDataObject[key]);
//console.log(key + " -> " + taskDataObject[key]);
console.log(taskDataObject[key]);
var tmpVal1 = taskDataObject[key]
var tmpVal2 = tmpVal1.trim();
console.log(tmpVal2);
}
}
});
Run Code Online (Sandbox Code Playgroud)
如果我理解你的问题,你只需要打电话text().trim()而不是text().text()返回一个String
如果您确实需要为每个属性值执行修剪,请执行以下操作:
for (var key in taskDataObject) {
if(taskDataObject[key].trim)
taskDataObject[key] = taskDataObject[key].trim();
}
Run Code Online (Sandbox Code Playgroud)
这是一个沿着所有子属性递归执行的函数:
function trimObjectProperties(objectToTrim) {
for (var key in objectToTrim) {
if (objectToTrim[key].constructor && objectToTrim[key].constructor == Object)
trimObjectProperties(objectToTrim[key]);
else if (objectToTrim[key].trim)
objectToTrim[key] = objectToTrim[key].trim();
}
}
// Using this function, you should call it in that way:
trimObjectProperties(taskDataObject);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2471 次 |
| 最近记录: |