2016-02-03 3 views
0

Я создаю функцию 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(new_data == saved_data)

Но это, очевидно, будет возвращать ложь, так как данные, someid тег не имеет то же значение.

Есть ли способ сделать сравнение этих строк, где это не имеет значения, какое значение имеет значение data-someid, если оно существует и имеет значение? И возможно ли это также с несколькими тегами в одной строке?

Редактировать для разъяснений: Я не хочу сравнивать только This is some text. Это должны быть заданные полные строки, но значение тега data-someid является переменной.

+0

is the div на странице, где вы получаете функцию direclty в функции? –

+0

Да, обе строки доступны в функции –

ответ

1

, так что вам нужно проверить, является ли внутренний текст одинаковым независимо от их идентификаторов?

затем сравнить их внутренний текст только с помощью

if ($(new_data).text() == $(saved_data).text()) 
{ 
    //alert("yes it is same"); 
} 
+0

Нет, мне нужно проверить эти полные строки, но значение тега data-someid является переменным (как следует из названия) –

0

Используйте

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

и

$(new_data).text() == $(new_data).text() 
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")} 

Здесь он сначала проверяет значение, а затем проверяет, имеют ли оба атрибута данных. Надеюсь, что это поможет

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. Метод non 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 в базе данных!

+0

В качестве примера я использовал 2 строки. Вопрос в том, могу ли я сравнить две строки независимо от того, какой результат находится между данными-someid. Что-то вроде data-someid = "*" –

+0

@GuidoVisser мой код только проверяет, существует ли someId – ShrekOverflow

+0

Как взломать, хотя вы можете злоупотреблять CSS-запросSlectorAll ;-) для проверки данных-someId, присутствующих у нескольких детей. – ShrekOverflow

0

Если вы не можете получить textcontent в боковых элементах div, и то, что вы получаете, это только строковое значение, как вы указали, тогда вы можете использовать функцию 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 text» Вы можете изменять значения функции подстроки, как требуется.

Вы также можете заменить значение some-id пустой строкой (""), используя функцию подстроки, такую ​​же, как в примере кода, и сохранить ее в некоторой другой строковой переменной и проверить равенство.

-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 }; 
+0

В разделе «Div» нет печати. На части кода используйте приведенные ниже переменные, и код работает хорошо. var new_data = '

This is some text
'; var saved_data = '
This is some text
'; – vathsala

Смежные вопросы