隐藏文本区域中的HTML标记

时间:2013-02-15 04:07:34

标签: javascript jquery html5

我有一个场景,我使用textarea自动完成jquery UI。每次用户从建议中选择一个值时,textarea都会填充选择后跟分号。

我需要跟踪建议中所选值的ID。我的想法是将它们放在span标签的数据属性中,在其中包装选定的值并填充textarea。但现在textarea正在显示这些HTML标签。

有关应该做什么的任何建议?

1 个答案:

答案 0 :(得分:0)

实现此目的的最佳方法是简单地保持您的ID (当您需要保持打开以便用户可以自由输入时)是在您需要时获取ID,而不是之前。我的意思是,允许您的用户自动完成并选择或手动输入,但是当您对该数据执行某些操作时,您可以为列表中的每个项目获取ID。

<textarea>Item 1; Item 2; Manual Item 3;</textarea>

然后在提交(或甚至在服务器端)时说,然后拆分列表并根据名称查找每个ID。这将自动防止用户执行诸如Item 1的手动修改或重新排序列表之类的内容:

<textarea>Item 42; Item 2; Manual Item 3;</textarea>

使用上面的示例,因为列表中的每个项目都会在您需要之前重新查询其ID,因此将使用Item 42代替Item 1。如果你有任何其他形式的ID跟踪,你必须检查这种可能性,这将导致一大堆额外的代码和工作。

在提交时检查ID时,您需要做的唯一额外工作是,如果您希望对尚不存在的项目发生任何特殊情况。但是,无论如何,您最有可能需要使用专门跟踪ID的系统来执行此操作。

如果您担心优化,可以始终使用名称作为查找键并将值作为ID(在用户自动填充时返回)保留哈希/对象。然后使用此哈希在用户完成时填写ID列表。

/// create your lookup object
lookup = {};

/// store in the lookup
lookup[name] = id;

/// then after a few selections you'll end up with an object like so:
{
  'Item 1': 1,
  'Item 2': 2,
  'Item 42': 42
};

显然,您可能希望考虑名称的大小写可能性,但可以使用.toLowerCase()

来实现