比较字符串与可变数据

时间:2016-02-03 11:13:05

标签: javascript jquery

我正在建立一个我需要输入2个字符串的javascript函数。保存的字符串和包含已保存数据的字符串:

var new_data = '<div data-someid="8c7883c9-2c33-45dc-b020-22c0ed1bdb93">This is some text</div>';
var saved_data = '<div data-someid="f0756125-b0f7-45de-972a-39c5d254eb27">This is some text</div>';

我需要检查2个字符串是否相同。如果我使用if语句,我会这样做:

if(new_data == saved_data)

但是这显然会返回false,因为data-someid标签没有相同的值。

有没有办法对这些字符串进行比较,只要它存在并具有值,它与data-someid具有什么值并不重要?在同一个字符串中有多个标签也可以吗?

编辑以澄清: 我不想仅仅This is some text进行比较。它必须是给定的完整字符串,但data-someid标记的值是可变的。

6 个答案:

答案 0 :(得分:1)

所以你需要检查内部文本是否相同,无论它们的ID是什么?

然后仅使用

比较它们的内部文本
if ( $( new_data ).text() == $( saved_data ).text() )
{
  //alert("yes it is same");
}

答案 1 :(得分:0)

使用

$(new_data).data('new_data') == $(new_data).data('saved_data')

$(new_data).text() == $(new_data).text()

答案 2 :(得分:0)

根据你的问题,你可以这样做

var new_data = '<div data-someid="8c7883c9-2c33-45dc-b020-22c0ed1bdb93">This is some text</div>';
var saved_data = '<div data-someid="abc">This is some text</div>';
if ( ($( new_data ).text() == $( saved_data ).text())&&($(new_data).data('someid'))&&($(saved_data).data('someid')))
{
  console.log("both are same");
}
else 
{console.log("both are not same")}

这里首先检查值,然后检查两者是否都有data-attribute。 希望它会有所帮助

答案 3 :(得分:0)

以下代码将实现您的要求

var $newData = $(new_data);
var newDataHasId = !!$newData.data('someid');
var newDataValue = $newData.text();

var $savedData = $(saved_data);
var savedDataHasId = !!$savedData.data('someid');
var savedDataValue = $savedData.text();
if ( newDataHasId && savedDataHasId && savedDataValue === newDataValue ){
   // yep
}

它会将两个字符串转换为实际的DOMElements,然后提取textContents。非jQuery方式将是

function hasId(element){
  return !!element.dataset['someid'];
}

function extractText(element){
  return element.textContent;
}

function hydrateElement(str){
  var div = document.createElement('div');
  div.innerHTML = str;
  return div.children[0];
}

var newDataEl = hydrateElement(new_data);
var savedDataEl = hydrateElement(saved_data);
var newDataVal = extractText(newDataEl);
var savedDataVal = extractText(savedDataVal);

if ( hasId(newDataEl) && hasId(oldDataEl) && newDataVal === savedDataVal) {
  //yep
}

另外,请不要将MARKUP保存在数据库中!

答案 4 :(得分:0)

如果你无法获得side div元素中的textcontent,而你得到的只是你指定的字符串值,那么你可以使用substring函数来提取文本。

实施例

var newDataStr = new_data.substring((new_data.indexOf('>')+1),new_data.lastIndexOf('<'))

var saveDataStr = saved_data.substring((saved_data.indexOf('>')+1),saved_data.lastIndexOf('<'))

然后你可以比较你得到的这些新字符串值。

注意:如果您有特定格式的字符串,则可以使用此方法。在这种情况下,格式是“一些文字” 您可以根据需要修改子字符串函数的值。

您还可以使用与示例代码相同的子字符串函数将some-id的值替换为空字符串(“”),并将其存储在其他字符串变量中并检查是否相等。

答案 5 :(得分:-1)

var new_data = '<div data-someid="8c7883c9-2c33-45dc-b020-22c0ed1bdb93">This is some text</div>';
var saved_data = '<div data-someid="f0756125-b0f7-45de-972a-39c5d254eb27">This is some text</div>';

var text1 = new_data.split('"');
text1.splice(1,1);//taking out the data-someid
var text2 = saved_data.split('"');
text2.splice(1,1);//taking out the data-someid

if(text1.join('')==text2.join('')){ //code };