我正在建立一个我需要输入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
标记的值是可变的。
答案 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 };